Как отменить определение переменной в схеме?

Как отменить определение переменной в Схеме? Возможно ли это?

16
задан Brian Tompsett - 汤莱恩 27 November 2015 в 17:33
поделиться

4 ответа

В схеме переменные определяются либо с помощью лямбда, либо с помощью одного из различных вариантов. Если вы хотите, чтобы один из них был «undefined», то все, что вам нужно сделать, это выйти из области, в которой они находятся. Конечно, на самом деле это не отменяет их, просто переменная больше не привязана к своему предыдущему определению.

Если вы делаете определения верхнего уровня, используя (define), то технически вы определяете функцию. Поскольку Scheme функциональна, функции никогда не исчезают. Я полагаю, что технически он хранится где-то в какой-то функции среды, поэтому, если вы хорошо знакомы с вашей реализацией (и она каким-то образом не защищена), вы, вероятно, могли бы перезаписать ее своим собственным определением среды globabl. За исключением этого, я бы сказал, что лучше всего было бы переопределить функцию, чтобы она возвращала нулевой список - он действительно настолько пустой, насколько и вы.

5
ответ дан 30 November 2019 в 22:01
поделиться

Вы не можете отвязать переменную в стандартной схеме. Вы могли установить! я полагаю, переменная должна быть undefined, или вы могли бы написать метаинтерпретатор, который материализует среду, позволяя вам ввести свое собственное понятие неопределенных переменных.

1
ответ дан 30 November 2019 в 22:01
поделиться
(set! no-longer-needed #f)

Достигает ли это желаемого эффекта? Вы также можете использовать определение на верхнем уровне.

guile> (define nigel "lead guitar")
guile> nigel
"lead guitar"
guile> (define nigel #f)
guile> nigel
#f
guile> 

Затем вы можете повторно определить переменную. Конечно, все это зависит от объема переменных: см. , ответ Грега .

3
ответ дан 30 November 2019 в 22:01
поделиться

Я думаю, что если вы хотите сделать эквивалент «освободить» или «освободить», то вам не повезло. вы не можете освободить переменную. вы МОЖЕТЕ переопределить его на что-нибудь маленькое, например #f, но как только вы это сделаете (определите foo 'bar), переменная foo будет существовать в некоторой форме до тех пор, пока вы не завершите программу.

С другой стороны, если вы используете let или letrec, конечно, имя будет существовать только до соответствующего закрывающего элемента ...

1
ответ дан 30 November 2019 в 22:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: