以下Common Lisp代码不会产生我期望的输出:
(loop for a from 5 to 10
and b = a do
(format t "~d ~d~%" a b))
Run Code Online (Sandbox Code Playgroud)
使用SCBL,它会产生以下输出:
5 5
6 5
7 6
8 7
9 8
10 9
Run Code Online (Sandbox Code Playgroud)
我期待a和b的值在每一行上都是相同的.
我在网上搜索了这个实例中循环宏的良好文档,但是找不到多少.我很感激任何见解!
Rai*_*wig 12
(loop for a from 5 to 10
and b = a
do (format t "~d ~d~%" a b))
Run Code Online (Sandbox Code Playgroud)
上面的代码在概念上可以看作接近PSETF.值以"并行"更新.原因是AND.
让我们用FOR替换AND:
(loop for a from 5 to 10
for b = a
do (format t "~d ~d~%" a b))
Run Code Online (Sandbox Code Playgroud)
上面将在概念上更新变量接近通常的SETF,"顺序".
CL-USER 20 > (loop for a from 5 to 10
for b = a
do (format t "~d ~d~%" a b))
5 5
6 6
7 7
8 8
9 9
10 10
Run Code Online (Sandbox Code Playgroud)
有关解释,请参阅Common Lisp HyperSpec 6.1.2.1迭代控件:
如果使用多个迭代子句来控制迭代,则默认情况下顺序发生变量初始化和步进. 当不需要顺序绑定和步进时,和构造可用于连接两个或多个迭代子句.条款的迭代行为加入了和类似于宏的行为做就要做*.
| 归档时间: |
|
| 查看次数: |
614 次 |
| 最近记录: |