- # 2008/11/25(Tue) : [Scheme] 継続スレッド
- 前回(11/12)の継続を使った疑似並列処理をさらに考えてみる。
複数のループを扱えるようにしてみた。
(define loop
(lambda (cc ls)
(cond
((pair? ls)
(display (car ls))
(loop (and (procedure? cc) (call/cc cc)) (cdr ls)))
((procedure? cc) (cc #f))
(else 'end))))
(let x ((ccs (list
(call/cc (lambda (cc) (loop cc '(1 2 3 4 5))))
(call/cc (lambda (cc) (loop cc '(a b c d e f g))))
(call/cc (lambda (cc) (loop cc '(X Y Z))))))
(result '()))
(if (pair? ccs)
(let ((cc (call/cc (car ccs))))
(if (procedure? cc)
(x (append (cdr ccs) (list cc)) result)
(x (cdr ccs) (cons cc result))))
result))
(newline)
もうちょっと綺麗に書けそうな気がするな。
[TOP] [ALL]

© 2005-2010 M-OZ SOFT.
Powered by Gauche Ver.0.8.10