2

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

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

产量

(2 4)

这行得通,对我来说只是看起来很有趣,而不是什么时候,而是因为我觉得我必须操纵条件才能返回我想要的东西。我知道它在评估时间时起作用的照应但这对我来说似乎有点人为。我错过了什么吗?我只是一个口齿不清的人几个星期。

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

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

但第二个它似乎变得不受约束......我该怎么做?

4

1 回答 1

4

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

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

如果您需要 FORMAT 无条件,请删除关键字 AND。

于 2011-01-30T14:30:15.047 回答