Exercise 3.39 答案有误
xuxiaoqiao opened this issue · 2 comments
xuxiaoqiao commented
题目见 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的情况不会发生
网络上的其他资源也与我的判断一致:
- http://community.schemewiki.org/?sicp-ex-3.39
- https://wizardbook.wordpress.com/2010/12/18/exercise-3-39/
我的思考过程是这样:
(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
zzz6519003 commented
(define (last-pair a)
(if (null? (cdr a))
a
(last-pair (cdr a))
)
)
错误貌似有点多~
numbbbbb commented
感谢指出错误,时间有点久我都忘的差不多了……等有空了我再重新看一边题。