我有一些代码从循环中收集点(consed integers),看起来像这样:
(loop for x from 1 to 100 for y from 100 downto 1 collect `(,x . ,y))
我的问题是,`(,x . ,y)
在这种情况下使用是否正确?
编辑:此示例不是关于生成100x100项的表,这里的代码只是说明了两个循环变量的使用以及它们的值的消耗.我编辑了循环以使其清楚.我使用的实际循环取决于其他几个函数(并且是其自身的一部分),因此用文字整数替换调用并将循环拉出函数更有意义.
这样做会更好(cons xy).
但要回答这个问题,这样做是没有错的:)(除了让它慢一点).
我认为这里的答案是资源利用率(以下文章)
例如在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]>