有条件的回指收集最佳做法?

时间:2011-01-30 12:38:57

标签: lisp conditional common-lisp clisp

我尝试遍历序列,有条件地对每个元素执行操作然后收集它(但只有当它符合条件时)。这是一个有效的简化示例,我只想知道这是否是lisp中的正确或最佳实践:

(loop for n in '(1 2 3 4 5)
          when (when (equal (mod n 2) 0) n )
          collect it) 

产量

(2 4)

这是有效的,它对我来说看起来很有趣,而不是什么时候,但是因为我觉得我必须要条件才能恢复我想要的东西。我得到了照应的评论时间,但这对我来说似乎有点人为。我错过了什么吗?几个星期以来,我只是一个lisper。

编辑:实际上,当我尝试应用它时,我有点困惑。我真正想做的是:

(loop for n in '(1 2 3 4 5)
        when (when (equal (mod n 2) 0) n)
        collect it
        do (format t "~A" it))

但是第二个似乎变得没有约束......我该怎么做?

1 个答案:

答案 0 :(得分:4)

我不明白为什么你需要这里的照应。

(loop for n in '(1 2 3 4 5) 
      when (evenp n) 
        collect n and
        do (format t "~A" n))

如果您想无条件地使用FORMAT,请删除关键字AND。