リストを、述語 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))