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
,