Хабы: Lisp, Программирование
Одной из особенностей работы с языком Scheme, в отличие от многих других динамических языков и "взрослых" диалектов Лиспа, является лексическая область видимости идентификаторов (как в классических компилируемых языках). С одной стороны, это удобно для статического анализа кода программы и особенно удобно для компиляции. С другой стороны, это затрудняет непосредственные операции с лексическим окружением.
Одной из самых проблематичных операций, реализацию которой затрудняет идеология Scheme, является стандартная для ряда диалектов форма is-bound?
, предназначенная для проверки, определён ли её аргумент, то есть занесён ли он в системный ассоциативный список атомов и, как следствие, имеет ли он вообще какое-либо значение. Рассмотрим, как мы можем реализовать данную форму в Gambit Scheme.
Читать далее