История изменений
Исправление monk, (текущая версия) :
Черт его знает чем это лучше объекта с слотом
эээ... объект со слотом тождественен замыканию.
Я про то, что для сбора списка лучше использовать http://common-lisp.net/project/iterate/doc/ , который расширяем, позволяет обходить последовательности (а не только собирать значения).
Кстати, ещё одно идеологическое отличие CL и Scheme: в Racket очень-очень редко используется with-...
Те же коллекторы делались бы так:
(define new-collector
(let ([store null])
(lambda ([map (lambda (x) x)])
(case-lambda
[() (reverse store)]
[(x) (set! store (cons (map x) store))]))))
(let ([col (new-collector)])
(col 1)
(col 2)
(col 3)
(col)) ; => '(1 2 3)
(let ([col (new-collector (lambda (x) (* 2 x)))])
(col 1)
(col 2)
(col 3)
(col)) ; => '(2 3 4)
... и писать ради функции на 5 строк целую библиотеку как-то жалко.
Исправление monk, :
Черт его знает чем это лучше объекта с слотом
эээ... объект со слотом тождественен замыканию.
Я про то, что для сбора списка лучше использовать http://common-lisp.net/project/iterate/doc/ , который расширяем, позволяет обходить последовательности (а не только собирать значения).
Кстати, ещё одно идеологическое отличие CL и Scheme: в Racket очень-очень редко используется with-...
Те же коллекторы делались бы так:
(define new-collector
(let ([store null])
(lambda ([map (lambda (x) x)])
(case-lambda
[() (reverse store)]
[(x) (set! store (cons (map x) store))]))))
(let ([col (new-collector)])
(col 1)
(col 2)
(col 3)
(col)) ; => '(1 2 3)
(let ([col (new-collector (lambda (x) (* 2 x)))])
(col 1)
(col 2)
(col 3)
(col)) ; => '(2 3 4)
Исходная версия monk, :
Черт его знает чем это лучше объекта с слотом
эээ... объект со слотом тождественен замыканию.
Я про то, что для сбора списка лучше использовать http://common-lisp.net/project/iterate/doc/ , который расширяем, позволяет обходить последовательности (а не только собирать значения).
Кстати, ещё одно идеологическое отличие CL и Scheme: в Racket очень-очень редко используется with-...
Те же коллекторы делались бы так:
(define new-collector
(let ([store null])
(lambda ([map (lambda (x) x)])
(case-lambda
[() (reverse store)]
[(x) (set! store (cons x store))]))))
(let ([col (new-collector)])
(col 1)
(col 2)
(col 3)
(col)) ; => '(1 2 3)
(let ([col (new-collector (lambda (x) (* 2 x)))])
(col 1)
(col 2)
(col 3)
(col)) ; => '(2 3 4)