【发布时间】:2010-09-11 05:13:12
【问题描述】:
我有一些代码从一个看起来像这样的循环中收集点(consed integers):
(loop
for x from 1 to 100
for y from 100 downto 1
collect `(,x . ,y))
我的问题是,在这种情况下使用`(,x . ,y) 是否正确?
编辑:这个示例不是关于生成一个 100x100 项目的表格,这里的代码只是说明了两个循环变量的使用和它们的值的组合。我已经编辑了循环以明确这一点。我使用的实际循环取决于其他几个函数(并且是其自身的一部分),因此将调用替换为文字整数并将循环拉出函数更有意义。
【问题讨论】:
-
仅供参考,只需省略 DO,它就符合 ANSI CL。 :) (DO 用于执行 Lisp 表达式,而不是用于引入 LOOP 子句。)
-
你确定是这样做的?我用从 0 到 5 的两个循环运行它并得到 ((0 . 0) (1 . 1) (2 . 2) (3 . 3) (4 . 4) (5 . 5)),我没有认为是预期的结果。
-
我不是要生成一个表,而是要说明从具有两个变量的循环中收集值。删除 do... 部分删除了警告消息“警告:循环:DO 后缺少表单:CLtL2 允许,ANSI CL 禁止。”
-
dsm:啊,好的,我现在明白你的意图了。原始“do”部分的问题是循环需要一个表单。在任何情况下,您最好避免使用反引号方法,因为 (cons x y) 使意图更清晰。