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_ となく。