Здесь много вопросов в одном, и StackOverflow работает лучше, когда вы задаете один конкретный вопрос для каждого сообщения.В любом случае, вот начало:
Lambda String Exp
, это строка или анонимная функция
Это значение с не специальным именем "Lambda", которое содержитString
и Exp
.Это эквивалент этого Java-класса:
class Lambda extends Exp {
String variable;
Exp expression;
}
Он представляет собой выражение анонимной функции в интерпретируемом языке.
является Exp
предопределенным значением?
Нет, это определено прямо здесь, в вашем фрагменте, data Exp = ...
Кем должны быть VLambda и VVar?
Интерпретатор использует разные типы для выражения и результирующего значения, поэтому выражение Lambda
будет преобразовано в значение VLambda
, а выражение Var
- в Value
изокружающая среда или VVar
, если это бесплатно (предположительно).Выражение App
будет оцениваться до тех пор, пока вы не получите Value
Какая область будет использоваться функцией eval?
Функция eval
будет оцениватьязык с динамической областью видимости.Вы можете сказать, потому что VLambda не имеет поля Env, которое могло бы хранить замыкание.
Что мы должны изменить, чтобы учесть другие области?
ВыЯ добавил бы поле Env к VLambda, которое будет хранить закрытие лексических переменных при оценке лямбды.