Нет, в R6RS такой вещи нет. Некоторые редкие реализации могут поддерживать что-то подобное, но в подавляющем большинстве (в том числе eval
на других языках!) Это невозможно.
Причина в том, что это просто: он разбивает компиляцию, поскольку это приводит к тому, что две функции различаются на основе локальных имен, а в некоторых случаях также могут запрещать простые оптимизации. Например, если есть что-то, что вы можете заполнить для своего ???
, тогда компилятор должен будет иметь две привязки, даже если их можно оптимизировать. В тех редких случаях, когда это возможно, все, что используется в ???
(которое на некоторых языках просто используется eval
) запускает другую компиляцию, которая отображает известные привязки к их значениям. (В некоторых браузерах есть странное поведение с eval
, которое упоминается буквально в JS-коде, что фактически является той же проблемой.)
Какие другие языки имеют «eval», который работает таким образом? – amoe
Как JS? Я не знаю. –
@amoe Язык программирования ядра использует такую оценку. – artemonster