Помогите Хьюго
Хьюго Дум хочет переупорядочить ветви
cond
так, чтобы ветвь для вызова процедур располагалась перед веткой для присваивания. Он утверждает, что при этом интерпретатор станет эффективнее: поскольку в программах обычно больше вызовов процедур, чем присваиваний, определений и т. д., его усовершенствованный
eval
обычно будет рассматривать меньше вариантов, чем исходный, при распознавании типа выражения.
а. Что за ошибка содержится в плане Хьюго? (Подсказка: что сделает его интерпретатор с выражением
(define x 3)
?)
б. Хьюго расстроен, что его план не сработал. Он готов пойти на любые жертвы, чтобы позволить интерпретатору распознавать вызовы процедур до того, как он проверяет все остальные типы выражений. Помогите ему, изменив синтаксис интерпретируемого языка так, чтобы вызовы процедур начинались с символа
call
. Например, вместо
(factorial 3)
нам теперь придется писать
(call factorial 3)
, а вместо
(+ 1 2)
—
(call + 1 2)
.
Комментарии отсутствуют.