Я узнал Clojure раньше и очень люблю язык. Я также люблю Emacs и взломал некоторые простые вещи с Emacs Lisp. Есть одна вещь, которая мешает мне мысленно делать что-то более существенное с Elisp. Это концепция динамического охвата. Я просто боюсь этого, так как он так чуждо мне и пахнет полуглобальными переменными.
Итак, с объявлениями переменных я не знаю, какие вещи безопасны, а какие опасны. Из того, что я понял, переменные, заданные с помощью setq, попадают под динамическое масштабирование (верно?) Что относительно переменных? Где-то я читал, что let позволяет вам делать лексическое определение, но где-то еще я читаю, что пусть vars также динамически охвачены.
Я больше всего беспокоюсь о том, что мой код (используя setq или let) случайно разбивает некоторые переменные из платформы или стороннего кода, который я вызываю, или после такого вызова мои локальные переменные случайно запутались. Как я могу избежать этого?
Есть ли несколько простых правил, которыми я могу просто следовать и точно знать, что происходит с областью, не будучи укушенным каким-то странным, трудно отлаживаемым способом?