common-lisp: разница между связыванием и символом - PullRequest
6 голосов
/ 19 апреля 2010

В чем (простыми словами) разница между установкой привязки (LET) и символов (= переменных) в общем lisp?

Ответы [ 2 ]

7 голосов
/ 19 апреля 2010

Символы и переменные - это два очень разных вида сущностей. Символ - это имя чего-то; Переменная является контейнером для значения. Переменная может быть названа символом.

Связывание - это связь между символом и переменной; когда действует привязка, вы можете ссылаться на переменную по ее имени. let форма создает такую ​​привязку.

1 голос
/ 19 апреля 2010

(let ((a 1))) устанавливает значение a в 1 до точки, где закрывающая скобка, которая совпадает с открывающей скобкой до того, как будет достигнуто значение let, в этот момент возвращается к тому, что было предыдущим значением ( становится неопределенным). Вы часто видите в теле функции let, где вам требуются локальные переменные, которые должны выходить из области видимости в конце функции, поэтому вы должны использовать let там.

(setf a 1) устанавливает a в 1 и предполагает, что либо a было ранее определено (либо с помощью defparameter, defvariable, либо let), либо что a - это новая специальная переменная, которой необходимо значение.

Это немного сложнее, но я не уверен, что у меня есть отбивные, чтобы объяснить это.

...