我有一些代码从循环中收集点(consed integers),看起来像这样:
(loop
for x from 1 to 100
for y from 100 downto 1
collect `(,x . ,y))
Run Code Online (Sandbox Code Playgroud)
我的问题是,`(,x . ,y)
在这种情况下使用是否正确?
编辑:此示例不是关于生成100x100项的表,这里的代码只是说明了两个循环变量的使用以及它们的值的消耗.我编辑了循环以使其清楚.我使用的实际循环取决于其他几个函数(并且是其自身的一部分),因此用文字整数替换调用并将循环拉出函数更有意义.
我认为这里的答案是资源利用率(以下文章)
例如在clisp中:
[1]> (time
(progn
(loop
for x from 1 to 100000
for y from 1 to 100000 do
collect (cons x y))
()))
WARNING: LOOP: missing forms after DO: permitted by CLtL2, forbidden by ANSI
CL.
Real time: 0.469 sec.
Run time: 0.468 sec.
Space: 1609084 Bytes
GC: 1, GC time: 0.015 sec.
NIL
[2]> (time
(progn
(loop
for x from 1 to 100000
for y from 1 to 100000 do
collect `(,x . ,y)) ;`
()))
WARNING: LOOP: missing forms after DO: permitted by CLtL2, forbidden by ANSI
CL.
Real time: 0.969 sec.
Run time: 0.969 sec.
Space: 10409084 Bytes
GC: 15, GC time: 0.172 sec.
NIL
[3]>
Run Code Online (Sandbox Code Playgroud)