LISP做函数行为吗?
我有这个列表代码块LISP做函数行为吗?,lisp,Lisp,我有这个列表代码块 (defun test (y) (do ((l NIL (setq y (rest y)))) ((null y) 1) (setq l (append l '(1 1))) (print l) ) ) 输出如下图所示。出于某种原因,它将l设置为y,然后追加“(1)。有人能解释这种行为吗 循环的结构是: (do ((var init-form step-form)) (terminat
(defun test (y)
(do
((l NIL (setq y (rest y))))
((null y) 1)
(setq l (append l '(1 1)))
(print l)
)
)
输出如下图所示。出于某种原因,它将l设置为y,然后追加“(1)。有人能解释这种行为吗
循环的结构是:
(do ((var init-form step-form))
(termination-form result-form)
(body))
我认为您缺少的是在每次迭代时执行步骤表单
,并且该表单的结果被设置为变量。因此,在step表单中使用setq
是一个标志,表明您可能没有按照预期进行操作
因此,循环从(test'(2 3 4))
开始的顺序是(省略打印)
do
循环的结构是:
(do ((var init-form step-form))
(termination-form result-form)
(body))
我认为您缺少的是在每次迭代时执行步骤表单
,并且该表单的结果被设置为变量。因此,在step表单中使用setq
是一个标志,表明您可能没有按照预期进行操作
因此,循环从(test'(2 3 4))
开始的顺序是(省略打印)
do
循环的结构是:
(do ((var init-form step-form))
(termination-form result-form)
(body))
我认为您缺少的是在每次迭代时执行步骤表单
,并且该表单的结果被设置为变量。因此,在step表单中使用setq
是一个标志,表明您可能没有按照预期进行操作
因此,循环从(test'(2 3 4))
开始的顺序是(省略打印)
do
循环的结构是:
(do ((var init-form step-form))
(termination-form result-form)
(body))
我认为您缺少的是在每次迭代时执行步骤表单
,并且该表单的结果被设置为变量。因此,在step表单中使用setq
是一个标志,表明您可能没有按照预期进行操作
因此,循环从(test'(2 3 4))
开始的顺序是(省略打印)
啊,谢谢你解释得这么好!我的困惑完全消除了。啊,谢谢你解释得这么好!我的困惑完全消除了。啊,谢谢你解释得这么好!我的困惑完全消除了。啊,谢谢你解释得这么好!我的困惑完全消除了。