Scheme 手習い 8 章 (2)

思いだした。リストの場合の継続がイメージできていないのでした。
ええとリストなので car を処理して継続の中でも cdr について evens-only*&co しないといけないのか。んでそれに渡す継続が、、なのか。
これって以下を机上で確認した方が良いのかな。

(evens-only*&co '((9 1 2 8) 3 10 ((9 9) 7 6) 2)
                 (lambda (newl product sum)
                   (cons sum (cons product newl))))

car がリストなので以下?

(evens-only*&co 
  '(9 1 2 8)
  (lambda (al ap as)
    (evens-only*&co 
      '(3 10 ((9 9) 7 6) 2)
      (lambda (dl dp ds)
        ((lambda (n p s)
           (cons s (cons p n)))
         (cons al dl)
         (mul ap dp)
         (add as ds))))))

'((1) 2) とかを渡して机上トレイスしてみたところ、リストの終端で一番外側にある継続が '() と 1 と 0 を渡されて起動されるのが分かります。
上記で言えばおそらくは要素の 9、1、2、8 向けの継続を積んでいって終端 '() で kickoff されて中にある evens-only*&co が起動する体なのか。
以下なカンジ?

(evens-only*&co
  '(3 10 ((9 9) 7 6) 2)
  (lambda (dl dp ds)
    ((lambda (n p s) (cons s (cons p n)))
     (cons '(2 8) dl)
     (mul 16 dp)
     (add 10 ds))))

そうか上記の継続が起動されるのはリストの最終端の '() を検出した時で以下なカンジになっているものと予想。

((lambda (dl dp ds)
   ((lambda (n p s) (cons s (cons p n)))
    (cons '(2 8) dl) 
    (mul 16 dp)
    (add 10 ds))
 '(10 (() 6) 2))
 120
 28)

ちょっと時間無いんで横着しました、@hanachin_ となく。