flickr2011/06/19いかにして私は思い悩むのを止めてcall/ccを便利に使うようになったかcall/ccは神秘的です。考えれば難しいことではないのですが、回答に至るプロセスを即答する自信はありません。なんていう式には実用性のかけらもない。採用面接の問題にはいいかも。Schemerを募集するような会社があるかどうか知りませんが。そんなcall/ccの使い道としてよく引き合いに出されるのは大域脱出です。ケント・ディヴィグの教科書の例を見てピンとくる人はいるのでしょうか。引数にゼロがあったら掛け算をやめてジャンプする。ありがたみがまったく感じられない話です。思うと、その次の例でいきなり登場するのは「プリエンプティブ・マルチタスクを実装したエンジン」なるもの。そこで、自分が「call/ccうれしい」と感じられそうな例を考えてみることにしました。大域脱出を強いられる状況を作るので、下準備が少し必要です。いま、こんなプロシージャー「>i>」が欲しいとしましょう。10)ようするに、整数を2つ与えると間を補完してくれるようなプロシージャーです。そのものを定義するのは簡単です。一歩進んで、こんな具合にメタ定義できるようにすることを考えてみましょう。ほうはマクロとして定義できます。使ったので、似たような補完プロシージャーをもりもり作れるようになりました。#\k)pizzaもどうぞ。同じ定義の繰り替えしです。kakko++))ぱっと思いつくのは次のような定義でしょう。とることになる引数の種類に応じて、当のプロシージャーを返そうという戦法です。...))))))しかし、これではうまくいきません。そんなものを求めていないからです。求めているのは、あくまでも、そのプロシージャーが返そうとしているプロシージャーのほうです。「自分への引数を調べてプロシージャーを返そうとするプロシージャー」のことは忘れて、当のプロシージャーを返すようにしましょう。...)))))))))これでうまくいきます。使わずに済ませることもできるのでしょうが、こんなふうに便利に使えることもあるので、ぜひみんな『『Scheme修行』』を読んで「なあんだ」と実感しておきましょう。『Scheme修行』ちなみに、この『Scheme修行』の制作にも使っているxml2tex.scm(名前とは裏腹に、変換のためのスクリプトというよりは変換を定義するためのスクリプト)でも、ここで紹介したのとまったく同じ方法でcall/ccを利用しています。機能を使うのが一番お手軽です。このスタイルでは、数値を指定してさまざまな囲み数字のグリフ(あれば)を呼び出すという便利な機能が提供され...職務経歴書いろいろあって職務経歴書を作成してみることにしました。編集をお手伝いしました。編集をお手伝いしました。Blogger.自己紹介k16詳細プロフィールを。