Интуиция здесь заключается в том, что все эти функции имеют дело с «формами верхнего уровня», а не с формой, которая зависит от лексической среды. В качестве очевидного примера, eval
может работать только с формами верхнего уровня, поэтому:
(let ([x 10])
(eval '(* 3 x)))
не работает. Обычное использование просто «форм» говорит о любых формах, таких как входные данные для макросов, которые, конечно, могут иметь такие ссылки.