commonLISP 中的 LET 和 SETF

LET and SETF in commonLISP

老师告诉我的,应该用let声明局部变量,用setf声明全局变量。

我试过运行下面的代码:

(let (state-list (problem-initial-state problem))
  (print state-list))

我得到 NIL。

但是,当我尝试以下操作时:

(setf state-list (problem-initial-state problem))
  (print final-list)

我得到了想要的值(problem-initial-state problem中的值)。

这是为什么?

PS:我为这些初学者问题道歉,我很难进入 LISP,来自 C 背景。

您的 let 表格中缺少一对括号:

(let ((a 1)
      (b 2))
  (print (list a b)))

将打印 (1 2).

你的表格

(let (state-list (problem-initial-state problem))
  (print state-list))

state-list 绑定到 nil 并将 problem-initial-state 绑定到 problem