在Common Lisp中使用循环宏的嵌套循环

时间:2016-11-25 20:45:51

标签: loops macros nested lisp common-lisp

我试图在CL中实现一个基本的嵌套循环,但Loop宏正在抵制这个。基本上,我想找到所有可能的3位数字产品,并将它们累积到列表中。

这是我的尝试:

NIL

上面的代码由于某种原因返回{{1}}。顺便说一句,我意识到我只跑到998,但这是为了测试目的。

我该怎么做才能获得这样的列表:

  

(999 * 999 999 * 998 ... 998 * 998 998 * 997 ... 997 * 997 997 * 996 ... 100 * 100)

1 个答案:

答案 0 :(得分:6)

内部循环中的COLLECT - 子句不会影响外部循环。因此内部循环返回结果列表,但外部循环中的DO - 子句只丢弃结果。您应该使用APPENDNCONC代替DO。如果没有性能问题,通常最好坚持使用APPEND,即使在这种情况下NCONC也是安全的。

(loop for x downfrom 999 to 900
      append (loop for y downfrom 999 to 900
                   collect (* x y)))