В то время как в ответе Фиби подводит итог, я бы хотел добавить контекст, который мне не хватает.
В обычном шрифте, в отличие от некоторых других языков (например, python), и, как и в некоторых других языках (например, C), существует различие между инициализацией и назначением переменной.
Глобальные переменные вводятся с использованием defvar
, defparameter
, а локальные переменные с использованием let
, let*
, lambda
и тому подобное. Однако речь идет не только о том, чтобы быть глобальным или локальным - см. этот вопрос о динамичности c против лексической области видимости .
После того, как вы ввели переменные с помощью вышеуказанных средств, вы можете использовать setf
для назначения.
В CLHS используются следующие правильные термины:
defvar, defparameter
defparameter
и defvar
установить sh имя в качестве динамической c переменной.
Ссылка: http://clhs.lisp.se/Body/m_defpar.htm
let, let *
let
и let*
создают новые привязки переменных ...
каждая привязка является лексической, если нет специального объявления об обратном
Ссылка: http://clhs.lisp.se/Body/s_let_l.htm#let
setf
setf изменяет значение места на новое значение.
Ссылка: http://clhs.lisp.se/Body/m_setf_.htm
Редактировать: учел комментарий @ tfb и CLHS.