在(循环...)中使用反引号/逗号成语是否正确?

dsm*_*dsm 1 lisp iteration

我有一些代码从循环中收集点(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项的表,这里的代码只是说明了两个循环变量的使用以及它们的值的消耗.我编辑了循环以使其清楚.我使用的实际循环取决于其他几个函数(并且是其自身的一部分),因此用文字整数替换调用并将循环拉出函数更有意义.

lep*_*pie 7

这样做会更好(cons xy).

但要回答这个问题,这样做是没有错的:)(除了让它慢一点).


dsm*_*dsm 5

我认为这里的答案是资源利用率(以下文章)

例如在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)