在常见的lisp循环宏中使用collect进行过滤

xda*_*liu 1 loops list-comprehension common-lisp

我试图使用循环宏过滤列表.如果我做

(loop for x in (list 1 2 3 4) collect x)
Run Code Online (Sandbox Code Playgroud)

我只是回到同一个列表,这是有道理的.但是,我想做点什么

(loop for x in (list 1 2 3 4) collect x if (evenp x))
Run Code Online (Sandbox Code Playgroud)

然后(2 4)回来,但这不合法.出于某种原因,我无法在其他文档中找到相应的语法.这可能吗?

jki*_*ski 6

正确的语法是

(loop for x in (list ...) when (evenp x) collect x)
Run Code Online (Sandbox Code Playgroud)