Как отменить определение переменной в Схеме? Возможно ли это?
В схеме переменные определяются либо с помощью лямбда, либо с помощью одного из различных вариантов. Если вы хотите, чтобы один из них был «undefined», то все, что вам нужно сделать, это выйти из области, в которой они находятся. Конечно, на самом деле это не отменяет их, просто переменная больше не привязана к своему предыдущему определению.
Если вы делаете определения верхнего уровня, используя (define), то технически вы определяете функцию. Поскольку Scheme функциональна, функции никогда не исчезают. Я полагаю, что технически он хранится где-то в какой-то функции среды, поэтому, если вы хорошо знакомы с вашей реализацией (и она каким-то образом не защищена), вы, вероятно, могли бы перезаписать ее своим собственным определением среды globabl. За исключением этого, я бы сказал, что лучше всего было бы переопределить функцию, чтобы она возвращала нулевой список - он действительно настолько пустой, насколько и вы.
Вы не можете отвязать переменную в стандартной схеме. Вы могли установить! я полагаю, переменная должна быть undefined, или вы могли бы написать метаинтерпретатор, который материализует среду, позволяя вам ввести свое собственное понятие неопределенных переменных.
(set! no-longer-needed #f)
Достигает ли это желаемого эффекта? Вы также можете использовать определение на верхнем уровне.
guile> (define nigel "lead guitar")
guile> nigel
"lead guitar"
guile> (define nigel #f)
guile> nigel
#f
guile>
Затем вы можете повторно определить
переменную. Конечно, все это зависит от объема переменных: см. , ответ Грега .
Я думаю, что если вы хотите сделать эквивалент «освободить» или «освободить», то вам не повезло. вы не можете освободить переменную. вы МОЖЕТЕ переопределить его на что-нибудь маленькое, например #f, но как только вы это сделаете (определите foo 'bar), переменная foo будет существовать в некоторой форме до тех пор, пока вы не завершите программу.
С другой стороны, если вы используете let или letrec, конечно, имя будет существовать только до соответствующего закрывающего элемента ...