2010-11-07 78 views
5

我刚开始学习Lisp和我似乎不明白下面的代码:如何在Common Lisp中追加工作?

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

ž附加?

+2

每个迭代中的所有z都被附加并返回为一个列表... – 2010-11-07 15:52:34

回答

10

它附加到循环终止时返回的未命名列表。作为第一近似,你可能会认为它是对

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

这里的append速记是一个循环关键字;它与append函数无关,除了共享相同的名称---所以它是loop宏决定它如何工作,而不是append函数。