В Конкретные абстракции , есть этот пример рекурсии:
(define subtract-the-first (lambda (n)
(if (= n 0) 0
(- (subtract-the-first (- n 1)) n))))
Это я понимаю.Например, если n = 3, эта функция оценивается следующим образом: (- (+ (+ (+ 1) 2) 3))
-> -6
Однако в одном из последующих примеров предполагается объяснить, почему невозможно изменить порядокопераций.Например, давайте посмотрим на это:
(define subtract-the-first2 (lambda (n)
(if (= n 0) 0
(- n (subtract-the-first2 (- n 1))))))
Если я позвоню (subtract-the-first2 4), результат будет равен 2. Однако я не совсем понимаю оценку.Очевидно, я здесь ошибаюсь, потому что вижу это: (- 4 (+ 3 (+ 2 (+ 1))) )
, что равно (- 4 6)
и, таким образом, оценивается как -2.
Я ценю любые указатели, так как я бью себя по головестены уже полчаса или около того ...
Спасибо!