Читаю главу про переменные. http://lisper.ru/pcl/variables То, что существуют лексические и динамические переменные понял. Наверное. Если перевеси на термины С- подобных языков, корректно же сказать, что лексические переменные это локальные переменные, а динамические это глобальные?
Не пойму, что такое лексическая привязка и динамическая привязка? Там в книге всё крутится вокруг кода
где *x* была определана ранее с помощью defvar. В данном случае это динамическая привязка? Потому что *x* это динамическая переменная?
Правильно сказать в терминах С- подобных языков, что в данном случае происxодит скрытие глобальной переменной в ф-и foo т.к. в её области видимости создали локальную переменную с тем же именем?
Если есть несколько потоков, если в момент времени t один поток зашёл в приведённый выше let всем потокам достанется изменённое значение *x* равное 10? Если да, это главное различие с С-подобными языками, там данный код это всего лишь создание локальной переменной *x* с которой работает только foo, а в CL это изменение привязки влияющее на всё, что работает с переменной *x*?
Вот это совсем не понял:
Ранние реализации Lisp использовали динамические переменные в качестве локальных, по крайней мере при интерпретации. Elisp, диалект Lisp, используемый в Emacs, является в некоторой мере устаревшим в этом отношении, продолжая поддерживать только динамические переменные. Некоторые другие языки повторили этот путь от динамических к лексическим переменным: например, локальные переменные в Perl являются динамическим, в то время как my-переменные, введенные в Perl 5 — лексические. Python никогда не имел настоящих динамических переменных, но ввел настоящую лексическую область видимости только с версии 2.2. (Лексические переменные Python все еще ограничены в сравнении с Lisp из-за объединения присваивания (assignment) и связывания (binding) в синтаксисе языка.)
1. Динамические переменные в качестве локальных. Имеется в виду что не было локальных и только это?
2. «локальные переменные в Perl являются динамическим, в то время как my-переменные, введенные в Perl 5 — лексические» - в перле если переменная не объявлена как my она глобальная, именно это имеется в виду?
3. «Python никогда не имел настоящих динамических переменных, но ввел настоящую лексическую область видимости только с версии 2.2.» - питон не имел глобальных переменных, но что имеется в виду под настоящими лексическими? т.е. были локальные которые не являлись лексическими? Что это значит?