exercise 3.33

(define (averager a b c)
  (let ((d (make-connector))
        (e (make-connector)))
    (adder a b d)
    (multiplier c e d)
    (constant 2.0 e)
    'ok))

こんな感じ。

gosh> (define x (make-connector))                        
x                                                        
gosh> (define y (make-connector))                        
y                                                        
gosh> (define z (make-connector))                        
z                                                        
gosh> (probe 'x x)                                       
#<closure (probe me)>                                    
gosh> (probe 'y y)                                       
#<closure (probe me)>                                    
gosh> (probe 'z z)                                       
#<closure (probe me)>                                    
gosh> (averager x y z)                                   
ok                                                       
gosh> (set-value! x 30 'k0ncha)                          
                                                         
Probe: x = 30                                            
done                                                     
gosh> (set-value! y 70 'k0ncha)                          
                                                         
Probe:z = 50.0                                          
                                                         
Probe:y = 70                                            
done   

zのprobeが先に呼ばれているけど、これは関数の登録の順番を変えれば変更できるでしょう。
connectorのconstraintsはスタック形式(って言っていいのかな)で保存されてるので、averagerよりyのprobeを先に入れると、
y変更→averagerが呼ばれる→z変更→zのprobe呼ばれる→yのprobeが呼ばれる
見たいな感じだと思われ。