Реализация внутренних определений
Бен Битобор, Лиза П. Хакер и Ева Лу Атор спорят о том, каким должен быть результат выражения
(let ((a 1))
(define (f x)
(define b (+ a x))
(define a 5)
(+ a b))
(f 10))
Бен говорит, что следует действовать согласно последовательному правилу для
define
:
b
равно
11
, затем
a
определяется как
5
, так что общий результат равен
16
. Лиза возражает, что взаимная рекурсия требует правила одновременной сферы действия для внутренних определений и нет причин рассматривать имена процедур отдельно от прочих имен. То есть она выступает за механизм, реализованный в упражнении
4.16
. При этом
a
оказывается не определено в момент, когда вычисляется
b
. Следовательно, по мнению Лизы, процедура должна выдавать ошибку. Ева не согласна с обоими. Она говорит, что если определения вправду должны считаться одновременными, то
5
как значение
a
должно использоваться при вычислении
b
. Следовательно, по мнению Евы,
a
должно равняться
5
,
b
должно быть
15
, а общий результат
20
. Какую из этих точек зрения Вы поддерживаете (если у Вас нет своей четвертой)? Можете ли Вы придумать способ реализации внутренних определений, который бы работал так, как предлагает Ева?
Комментарии отсутствуют.