Scheme SICP ex1.10。不应该';我们不能这样解决它:-

Scheme SICP ex1.10。不应该';我们不能这样解决它:-,scheme,sicp,Scheme,Sicp,我刚才正在解《计算机程序的结构和解释》一书,有一个关于练习1.10的问题,练习1.10使用Ackermann的函数定义为 (define (A x y) (cond ((= y 0) 0) ((= x 0) (* 2 y)) ((= y 1) 2) (else (A (- x 1) (A x (- y 1)))))) 确定表达式(A 1 10)的值 以下是我的解决方案: (A 1 10) (A 0 (A 0 9)) (A 0 (18)) 3

我刚才正在解《计算机程序的结构和解释》一书,有一个关于练习1.10的问题,练习1.10使用Ackermann的函数定义为

(define (A x y)
  (cond ((= y 0) 0)
    ((= x 0) (* 2 y))
    ((= y 1) 2)
    (else (A (- x 1)
             (A x (- y 1))))))
确定表达式(A 1 10)的值

以下是我的解决方案:

(A 1 10)
(A 0 (A 0 9))
(A 0 (18))
36
现在我知道答案是1024,我在互联网上得到了解决方案,但我认为会发生的是,当x的值会减小x在
(A x(-y 1))
中的值会减小,但似乎不是这样。怎样按照应用顺序,这不是真的吗? 此外,当递减的值能够调用函数时,与ex 1.9中发生的情况相同。
提前谢谢。

x的值不会改变-在书的一半左右引入变异之前,变量的值不会改变。
使用本书所教的替代法

就这样

(A 1 10)
[Replace x with 1, y with 10 in (A (- x 1) (A x (- y 1)))]
(A (- 1 1) (A 1 (- 10 1))) 
(A 0 (A 1 9))      
(* 2 (A 1 9))
[Replace x with 1, y with 9]
(* 2 (A (- 1 1) (A 1 (- 9 1)))))
(* 2 (A 0 (A 1 8))))
(* 2 (* 2 (A 1 8)))
[...]
(* 2 (* 2 (A 0 (A 1 7))))
[...]

(在这一点上,你可能会意识到
(a1k)
K
:2的次幂,或者你可能不会。)

这是什么语言?标记它的scheme,lisp
(-x1)
方言不会改变
x
,因此它是
1
第一次调用的整个持续时间。参数的计算在应用之前完成,但除非使用变异,否则不会变异变量。为什么要从互联网上获得解决方案?没有安装scheme?是的,我有scheme,我得到了解决方案(1024),但它与我的错误答案(36)不匹配,所以我去了互联网。对不起,你能解释一下变异变量吗?(A110-->{x=1;y=10}(A(-X1)(Ax(-Y1)))。计算
(-x1)
不会更改
x
本身的值。它保持原样,
x=1
-->(A(-11)(a1(-101)))-->(a0(a19))。