M-OZ BLOG

Scheme-users.jpTwitter

# 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]