小编Ant*_*ana的帖子

为什么使用“let”时“setf”不起作用?

setfwhen 与 结合的行为let让我感到困惑。在这里,setf不会更改列表中的第二个值。

(defun to-temp-field (lst)
  (let ((old-value (nth 2 lst))
        (new-value 'hello))
    (progn
      (setf old-value new-value)
      lst)))
Run Code Online (Sandbox Code Playgroud)

但如果我不这样做let,它会改变:

(defun to-temp-field (lst)
  (let ((new-value 'hello))
    (progn
      (setf (nth 2 lst) new-value)
      lst)))
Run Code Online (Sandbox Code Playgroud)

是什么导致了这种行为?

variables reference common-lisp variable-assignment let

4
推荐指数
1
解决办法
212
查看次数