schemeのcontinuation(継続)でpythonのyieldを実装する

http://blog.bytefreeze.com/past/2010/6/22/pythons_yield_in_scheme/

pythonのジェネレータを使って不思議に思った人はこの記事を読むともっと頭が混乱するかもしれない。けど、直線的でないプログラムの動かしかたに関心のある人にはお勧め。

schemeには継続といって関数の中の状態を保存して、それをどこかに渡して、任意のところで再開始することができる機能をそなえている。普通のコントロールフローに慣れていると、タイムマシンみたいな体験だ。

schemeでcall/ccを使ってちょっと遊んでみたが、なかなか使い込なせるものじゃない。アプリケーションに使うというよりかは、言語デザイナーがもっと一般的なコントロールフローを実装するために使うような代物だ。

例外とかcoroutineやpythonのジェネレータなどは継続で実装可能らしい。以前どこかでジェネレータは継続と同位のパワーを持っていて、双方実装できるとかいう記事を見たことある。使い易いインターフェスのジェネレータを実装したといろがpythonらしい。また、最もパワフルなインタフェースcall/ccをschemaが選択したのもまたそれらしい。

以前perlでやってみたことがあるので参考までに:
http://d.hatena.ne.jp/karasuyamatengu/20090908/1252441668