[room] Вопрос по Lisp

Денис Смирнов =?iso-8859-1?q?mithraen_=CE=C1_altlinux=2Eru?=
Вт Фев 6 19:28:51 MSK 2007


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 <name> ...) -
AV> очень удобная и полезная конструкция в scheme. :) На CL наверняка этот
AV> цикл будет проще записать каким-нибудь другим способом.
AV> Если мы нашли первый не-нуль от конца, то скопируем все нужные
AV> элементы и выйдем из цикла.

А в чем вообще принципиальнальное различие между scheme и lisp? man что на
предмет истории развития этих языков?

-- 
С уважением, Денис

http://freesource.info
----------------------------------------------------------------------------
Небезопасная это штука - wget.
		-- ldv in sisyphus@



Подробная информация о списке рассылки smoke-room