Code Review
Compare your solutions
#|
Упражнение 3.8
Когда в разделе 1.1.3 мы определяли модель вычислений, мы сказали, что первым шагом при вычислении
выражения является вычисление его подвыражений. Однако мы нигде не указали порядок, в котором проходит
вычисление подвыражений (слева направо или справа налево). Когда мы вводим присваивание, порядок, в
котором вычисляются аргументы процедуры, может повлиять на результат. Определите простую процедуру f,
так, чтобы вычисление (+ (f 0) (f 1)) возвращало 0, если аргументы + вычисляются слева направо, и 1,
если они вычисляются справа налево.
|#
(#%require rackunit)
(define (make-f)
(let ((acc 'none))
(lambda (x)
(if (eq? acc 'none)
(begin
(set! acc x)
0)
acc))))
(define f (make-f))
(define g (make-f))
(check-equal? (+ (f 0) (f 1)) 0)
(check-equal? (+ (g 1) (g 0)) 1)