在Common Lisp循环中的条件下收集并执行某些操作

Emi*_*ien 0 lisp loops common-lisp

我需要在循环条件下执行除"collect"之外的指令,我无法找出工作语法......

例如,我希望以下代码打印i并在2 <i时收集它.

(loop for i '(1 2 3 4) in  when (< 2 i) (print i) collect i)  ==> (3 4)
Run Code Online (Sandbox Code Playgroud)

希望你能帮忙!

Syl*_*ter 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)
Run Code Online (Sandbox Code Playgroud)

我建议你阅读Black Belts的LOOP.如果你看上面这部分,你会看到:and一个稍微复杂的例子.

NB:loop接受来自任何包的符号,所以我的风格是使用关键字包不要用loop关键字污染我自己的包,我的编辑器稍微强调它.你不需要按照我的方式去做:-)