LET и SETF в общем LISP

Из того, что сказал мне мой учитель, я должен использовать let для объявления локальных переменных и setf для объявления глобальных переменных.

Я пытался запустить следующий код:

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

и я получаю ноль.

Тем не менее, когда я пытаюсь следующее:

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

Я получаю желаемое значение (значение в проблеме начального состояния проблемы).

Это почему?

PS: Я прошу прощения за эти вопросы для начинающих, мне тяжело попасть в LISP, исходя из C-фона.

1 ответ

Решение

Вы пропускаете пару паренов в вашем 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,

Другие вопросы по тегам