リストを、述語 p を適用した結果が真になるものと偽になるものに分ける partition を継続渡しスタイルで書いてみた。
(define partition (lambda (p lis co) (cond ((null? lis) (co '() '())) ((p (car lis)) (partition p (cdr lis) (lambda (l r) (co (cons (car lis) l) r)))) (else (partition p (cdr lis) (lambda (l r) (co l (cons (car lis) r)))))))) (print (partition odd? '(1 2 3 4 5) list))
takatoh@nightschool $ gosh partition.scm ((1 3 5) (2 4))