Как работает дополнение в Common Lisp? - PullRequest
5 голосов
/ 07 ноября 2010

Я только начал изучать Лисп, и мне кажется, что я не понимаю следующий фрагмент кода:

(setf y (loop for x in y
              for z = (something)
              unless (condition for z)
              append z))

Где добавлено z ?

1 Ответ

10 голосов
/ 07 ноября 2010

Он добавляется к неназванному списку, который будет возвращен после завершения цикла. В первом приближении вы можете рассматривать это как сокращение для

(loop ... append z into result finally (return result))

append здесь является ключевым словом цикла; он не связан с функцией append, за исключением того, что имеет одно и то же имя - поэтому макрос loop решает, как он работает, вместо функции append.

...