为什么这段代码不打印出数组的内容 -
(defun loopfn (state)
(loop for x from 0 to 2 do
(loop for y from 0 to 2 do
(aref state x y))))
这里我传递了一个 3x3 矩阵,它是这样构建的 -
`(setq i (make-array '(3,3) :initial-contents '((0 1 3) (4 2 5) (7 8 6))))`
我正在打电话 - (loopfn i)
编辑 - - - -
@格雷格
感谢您指出了这一点...
我有以下问题..
为什么这会打印输出...
(defun loopfn ()
(loop for x from 0 to 3 do
(if (eq x 2)(return (list x)))))
这会打印一个 nil...
(defun loopfn ()
(loop for x from 0 to 2 do
(loop for y from 0 to 2 do
(if (eq x 2)(return (list x y))))))
我正在打电话
(loopfn)
您的代码不会打印任何内容。这也是你想要的——通常是这样。
但您希望函数返回一些有用的东西。
因此,您需要了解打印和让 REPL 打印返回值之间的区别。
CL-USER > 3
3
上面返回 3。Read-Eval-Print-Loop 打印返回值。
CL-USER > (print 3)
3
3
上面打印了一个newline
然后两倍3
。为什么?
第一个是副作用PRINT
调用它打印换行符,然后打印它的参数。
第二个是 REPL 打印返回值。
另请注意EQ
不适用于数字比较。使用EQL
反而。
看:http://www.lispworks.com/documentation/lw50/CLHS/Body/f_eql.htm http://www.lispworks.com/documentation/lw50/CLHS/Body/f_eql.htm
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)