Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 在Common Lisp中使用循环宏的嵌套循环_Loops_Macros_Nested_Lisp_Common Lisp - Fatal编程技术网

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

Loops 在Common Lisp中使用循环宏的嵌套循环,loops,macros,nested,lisp,common-lisp,Loops,Macros,Nested,Lisp,Common Lisp,我试图在CL中实现一个基本的嵌套循环,但循环宏拒绝了这一点。基本上,我希望找到所有可能的3位数产品,并将它们累积到一个列表中 以下是我的尝试: (loop for x downfrom 999 to 998 do (loop for y downfrom 999 to 998 collect (* x y))) 由于某种原因,上面的代码返回NIL。顺便说一句,我知道我只运行到998,但这是为了测试目的 我可以做些什么来获得这样的列表: (999*999*998…998*998 998*997

我试图在CL中实现一个基本的嵌套循环,但循环宏拒绝了这一点。基本上,我希望找到所有可能的3位数产品,并将它们累积到一个列表中

以下是我的尝试:

 (loop for x downfrom 999 to 998 do (loop for y downfrom 999 to 998 collect (* x y)))
由于某种原因,上面的代码返回
NIL
。顺便说一句,我知道我只运行到998,但这是为了测试目的

我可以做些什么来获得这样的列表:

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


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

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

魔术非常感谢!我仍然习惯于阅读CL的文档,它们有时会让人困惑。@Mad物理学家w.r.t.CLHS循环页面,这是一种温和的轻描淡写,不是吗@意志是的,温和的哈哈:-)Peter Seibel概述了LOOP: