Open xuxiaoqiao opened 7 years ago
题目见 http://sarabander.github.io/sicp/html/3_002e4.xhtml#Exercise-3_002e39
你的答案如下
; except two normal value, there are one special case ; second proc read x before first set! works (after square operator, because set! is not included in serializer), so result is 11.
但是我认为,那个 special case 的答案是 100, 而11的情况不会发生 网络上的其他资源也与我的判断一致:
我的思考过程是这样:
(lambda () (set! x ((s (lambda () (* x x)))))) (s (lambda () (set! x (+ x 1))))
第一行的函数会进行两个 process : 1. 计算新的值(计算新值的过程是 atomic 的,这一点由 serializer 保证)(我把这个操作记为p); 2. 赋值给x(我把这个操作记为q) 第二行的函数进行一个操作: 计算新值并赋值(整个过程是 atomic 的)(我把这个操作记作a)
如果整个程序以"paq"的顺序发生,那么结果就是100
(啊开学前看不完SICP要死了orz
(define (last-pair a) (if (null? (cdr a)) a (last-pair (cdr a)) ) )
错误貌似有点多~
感谢指出错误,时间有点久我都忘的差不多了……等有空了我再重新看一边题。
题目见 http://sarabander.github.io/sicp/html/3_002e4.xhtml#Exercise-3_002e39
你的答案如下
但是我认为,那个 special case 的答案是 100, 而11的情况不会发生 网络上的其他资源也与我的判断一致:
我的思考过程是这样:
第一行的函数会进行两个 process : 1. 计算新的值(计算新值的过程是 atomic 的,这一点由 serializer 保证)(我把这个操作记为p); 2. 赋值给x(我把这个操作记为q) 第二行的函数进行一个操作: 计算新值并赋值(整个过程是 atomic 的)(我把这个操作记作a)
如果整个程序以"paq"的顺序发生,那么结果就是100
(啊开学前看不完SICP要死了orz