以前コルーチンの記事Co-Routine / Pythonを書きましたが、Scheme(Lisp)でやってみました。最近、データ処理には「やはりLispが向いているかも」という気まぐれから、Schemeに再びはまっています。Schemeといえば、call/ccによる「継続」が有名ですが、ならばコルーチンでしょう、ということになりました。しくみがわかりやすいようにシンプルなものにしました。
#lang racket
(define cont #f)
(call/cc (lambda (return)
((lambda (yield)(yield 1)(yield 2)(yield 4))
(lambda (value)
(call/cc (lambda (c)
(set! cont c)
(return value)))))))
今回使ったこのDrRacketというツールは、初めて使ったのですが、とても高機能で使いやすいです。再びはまったのも、このツールによるところが大です。
http://blog.livedoor.jp/kosugip/archives/692821.html 参考
