ふと思いついたのでCPS
リスト構造の中のノード数を数える手続きを考える.
(define node-count (lambda (tree) (if (pair? tree) (+ 1 (node-count (car tree)) (node-count (cdr tree))) 1)))
当然末尾再帰になってないからスタックがあふれる.
これをCPSに変換するのはちょっとめんどくさい上に読みづらい.
(define node-count-cps (letrec ((node-count-iter (lambda (tree k) (if (pair? tree) (node-count-iter (car tree) (lambda (x) (node-count-iter (cdr tree) (lambda (y) (k (+ 1 x y)))))) (k 1))))) (lambda (tree) (node-count-iter tree (lambda (x) x)))))
どうにかならんのやか?