1
我正在尝试使用循环宏来过滤列表。如果我做使用通用lisp循环宏进行过滤
(loop for x in (list 1 2 3 4) collect x)
我只是得到相同的名单,这是有道理的。不过,我想这样做
(loop for x in (list 1 2 3 4) collect x if (evenp x))
,并得到(2 4)
回来,但是这是不合法的。出于某种原因,我无法在其他文档上找到适当的语法。这可能吗?
“我无法找到合适的语法这对其他文档。” HyperSpec是非常合理的文档。 [** loop **]的条目(http://www.lispworks.com/documentation/HyperSpec/Body/m_loop.htm)包含一个语法,相关的生产是'conditional :: = {if |当|时除非}形式selectable-clause {和selectable-clause} * [else selectable-clause {和selectable-clause} *] [end]'。你只需要改变顺序为**如果(evenp x)收集x **(尽管如果你不使用** else **,那么当**时**会更加惯用)。 –