Scheme:使いたい人のための継続入門が参考になるであろう。
ところでここを見ると、
注目してもらいたい関数はcall-with-input-fileだ
call-with-input-fileの処理はキモだけを抽出すると、次のコードになる。
;; とんでもなく杜撰なcall-with-input-fileの実装(コアのみ)
(define (call-with-input-file file-name proc)
(proc (open-input-file file-name)))
つまり、call-with-input-fileは ファイルから入力ポートを作り出し、それを渡してprocをcallする という関数なのだ。 call procedure with input fileという感じだろうか。
これってpythonのwithとやりたいことは同じだ。()を使わずにかつよく使う使い方のみをうまく使えるようにするのがpythonの言語としての方向性なんだろう。
rubyではcall/ccやめるとかなんとか??(このへん)。古いんで2009年はどうなるかは興味ある人は自分で調べてください。
そもそもCall/CCがrubyに実装されている理由はただ一つで、「実装できてし まったから」である。最近のRuby関連メーリングリストの流れを見ていると 「Call/CCステ」の方向で あるのは間違いない。まあ、普通の人間が「おっ、ここはCall/CCを使えば カッコ良く実装できるね!」などと思いついたりすることはまずありえないので、 ある意味安心である。
LLの実装の構造上、実装することはそれほど難しいことではないが、使い手を選ぶといったところなのだろう。この点で言語の課題は「実装技術」ではなく「利用者負担」である以上、pythonの方針は正しいのだろう。
C/C++が低レベルの方向で切れ味がある分、指をきったり足を打ちぬいたりが簡単にできるように、lisp系の言語ではそれを抽象化の方向で同じように指をきったり足を打ちぬいたりできるといったところだろうか。
0 件のコメント:
コメントを投稿