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

Mad*_*ist 2 lisp macros loops nested common-lisp

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

这是我的尝试:

 (loop for x downfrom 999 to 998 do (loop for y downfrom 999 to 998 collect (* x y)))
Run Code Online (Sandbox Code Playgroud)

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

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

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

jki*_*ski 6

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

(loop for x downfrom 999 to 900
      append (loop for y downfrom 999 to 900
                   collect (* x y)))
Run Code Online (Sandbox Code Playgroud)

  • CLM LOOP页面上的@MadPhysicist,这是一个_mild_轻描淡写,不是它.:) (3认同)