loops - 在 Common Lisp 循环内的条件下收集并做某事

标签 loops lisp common-lisp

我需要在循环中的条件下执行除“collect”之外的指令,但我无法找出有效的语法...

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

(loop for i '(1 2 3 4) in  when (< 2 i) (print i) collect i)  ==> (3 4)

希望你能帮上忙!

最佳答案

: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 接受来自任何包的符号,所以我的风格是使用关键字 package 而不是用 loop 关键字污染我自己的包,我的编辑器将它突出显示得更好.你不需要按照我的方式去做:-)

关于loops - 在 Common Lisp 循环内的条件下收集并做某事,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47242974/

相关文章:

r - 然后根据 R 中返回的新值匹配两列中的值

javascript - ajax错误时中断循环

recursion - LISP- 将递归改进为旋转列表函数中的尾递归

clojure - 注入(inject):into: in Smalltalk?的Clojure等价物是什么

functional-programming - 创建元素出现在列表中的所有索引列表的函数

lisp - 常见的 Lisp 练习/问题

r - 循环创建错误数量的图

php - Wordpress:显示一个类别的 25 个帖子和另一个类别的 55 个帖子

lisp - SBCL Buildapp——如何进行调试/故障排除?

c# - LISP 中的关联列表是否与 C# 中的字典相同?