练习 3.39

因为 ((s (lambda () (* x x))))((s (lambda () (set! x (+ x 1))))) 都是串行化操作,因此可以将它们看作是一个单独的执行单位 sasb ,并将题目给出的表达式转换成以下表示:

(parallel-execute (lambda () (set! x sa))
                  sb)

以上表达式可能的执行序列有以下这些( ? 符号表示执行过程被其他操作打断):

  1. sb –> (set! x sa)
  2. (set! x ?) –> sb –> (set! x sa)
  3. (set! x sa) –> sb

这些执行序列会产生以下结果:

  1. (set! x (+ 10 1)) => x = 11 => (set! x (* 11 11)) => x = 121
  2. (set! x ?) => (set! x (+ 10 1)) => x = 11 => (set! x (* 11 11)) => x = 121
  3. (set! x (* 10 10)) => x = 100 => (set! x (+ 100 1)) => x = 101

讨论

blog comments powered by Disqus