除了"收集"我还需要执行一条指令。在一个循环的条件下,我无法找出一个有效的语法...
例如,我希望以下代码打印i并在2< 1< 1< 1< 1< 1>岛
(loop for i '(1 2 3 4) in when (< 2 i) (print i) collect i) ==> (3 4)
希望你能帮忙!
答案 0 :(得分:5)
:if
或:when
中的多个条款需要由:and
加入。关键字:end
实际上会被忽略,除了让您感觉更轻松阅读之外别无其他。
(loop :for i :in '(1 2 3 4)
:when (< 2 i)
:do (print i)
:and :collect i
:end) ; ==> (3 4) (and prints 3 and 4 as side effect)
我建议你阅读LOOP for Black Belts。如果你看right above this part,你会在稍微复杂的例子中看到:and
。
注意:loop
接受来自任何包的符号,因此我的风格是使用关键字包不要用loop
关键字污染我自己的包,我的编辑器会稍微强调它。你不需要按照我的方式去做: - )
答案 1 :(得分:4)
CL-USER 71 > (loop for i in '(1 2 3 4)
when (> i 2)
do (print i) and collect i)
3 ; printed
4 ; printed
(3 4) ; return value
答案 2 :(得分:1)
在你的情况下,使用print的返回值会更短:
(loop for i in '(1 2 3 4) when (> i 2) collect (print i))