From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Tue, 6 Feb 2007 19:28:51 +0300 From: =?koi8-r?B?5MXOydMg883J0s7P1w==?= To: =?koi8-r?B?y9XM2NTV0s7ZyiDPxtTP0MnL?= Message-ID: <20070206162850.GA31516@mw.local.seiros.ru> References: <20070126042406.GA4279@mw.local.seiros.ru> <20070128051952.GC8647@mw.local.seiros.ru> MIME-Version: 1.0 Content-Type: text/plain; charset=koi8-r Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: Subject: Re: [room] =?koi8-r?b?98/Q0s/TINDPIExpc3A=?= X-BeenThere: smoke-room@lists.altlinux.org X-Mailman-Version: 2.1.9rc1 Precedence: list Reply-To: =?koi8-r?b?y9XM2NTV0s7ZyiDPxtTP0MnL?= List-Id: =?koi8-r?b?y9XM2NTV0s7ZyiDPxtTP0MnL?= List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 06 Feb 2007 16:28:56 -0000 Archived-At: List-Archive: On Sun, Jan 28, 2007 at 11:33:39AM +0300, Alexey Voinov wrote: > AV>> Не, ты не понимаешь. :) Тупо - это вот так (используем srfi-1): > AV>> (define (trim-zeroes-right data) > AV>> (reverse (drop-while zero? (reverse data))) >> Гм. Логично. В описании к тому же nyquist я почему-то drop-while не нашел >> :-/ AV> Это из http://srfi.schemers.org/srfi-1/srfi-1.html AV> В Сommon Lisp наверняка аналогичная функция есть в стандартной AV> библиотеке. :) Понял, буду искать. В nyquist (на базе xlisp), где мне это было надо, ненашел. > AV>> (define (trim-zeroes-right data) > AV>> (let loop ((newlen (vector-length data))) > AV>> (let ((index (- newlen 1))) > AV>> (cond ((zero? newlen) > AV>> '#()) > AV>> ((zero? (vector-ref data index)) > AV>> (loop index)) > AV>> (else > AV>> (vector-copy data 0 newlen)))))) >> Только эту конструкцию я не смог прочитать: > AV>> (cond ((zero? newlen) > AV>> '#()) > AV>> ((zero? (vector-ref data index)) > AV>> (loop index)) AV> Если мы в подсчёте нулей дошли до начала вектора (длина нового вектора AV> равна 0), то возвращаем сразу пустой вектор, не дёргая копирования и AV> выйдем из цикла. AV> Если элемент в текущей позиции (index всегда на единицу меньше newlen) AV> равен 0, то повторить процедуру сначала, уменьшив длину нового вектора AV> на единицу (т.е. взять вместо длины - индекс). (let ...) - AV> очень удобная и полезная конструкция в scheme. :) На CL наверняка этот AV> цикл будет проще записать каким-нибудь другим способом. AV> Если мы нашли первый не-нуль от конца, то скопируем все нужные AV> элементы и выйдем из цикла. А в чем вообще принципиальнальное различие между scheme и lisp? man что на предмет истории развития этих языков? -- С уважением, Денис http://freesource.info ---------------------------------------------------------------------------- Небезопасная это штука - wget. -- ldv in sisyphus@