2010-03-01から1ヶ月間の記事一覧

さらに継続を渡して

find-foldからfind-fold2にすることで、procを継続渡し方式に変更できた。 だけど、find-fold2自身は(null? lis)が真となるときに、依然として「seed(=戻り値)を返却する」というCall-Return方式になっている。 これを継続渡し方式に修正してみよう、との…

継続渡し形式

find-foldからfind-fold2への書き換えでいきなりつまずいてたけど、やっと理解できてきたかも。 指定した条件を満たす要素だけfoldするfind-foldは、素直に書くと以下のようになる。 (define find-fold (lambda (pred? proc seed lis) (cond ((null? lis) se…

継続渡しで実行を制御する

find-foldで済むものを、なぜ手間をかけてfind-fold2にするのか。 それは外から与えられるproc/contを少しいじるだけで、find-fold2の実行を制御できるからだ、と。 ということで、コード例をば。次のようなnextとbreakとadd/breakを定義して、 (define next…

マクロ展開に対する先入観

プログラマがコード中に書いたマクロ マクロ展開によって出現するマクロ すべてが展開された後に評価されるもんだという先入観があった。 だけど、id:yagiey:20100223:1266942998あたりからその先入観が疑わしく感じ始めた。 例えば次のような場合 gosh> (de…

プログラミング

なぜ僕はプログラミングをするのだろう。なぜプログラミングを始めたのだろう。 「ゲームを作りたいから」というのはよくある動機なのだろうけど、あいにく僕は子供の頃からゲームの類いを親から禁止されていたため、ゲームには今も興味がない。 なぜ僕はこ…

新たな変数名の作成

id:yagiey:20100305:1267761841にトラバもらった。id:trotr:20100308:1268043643 引数を加工することが必要っぽいので、objectを書き直してみた。 今度はちゃんとget-○○○って名前にした。 (define-macro (object args . methods) `(lambda ,args (lambda (mn…

むずい...

やっと継続の章に入った。find-foldの継続渡し形式への変換でいきなりつまづいた。 今までもそうだったけど、読んですぐ理解できないことなんていくつもあった。 今回も、何日もかければきっと理解できるはず! 1章3節「Scheme」(6ページ)で lambda式は、…

使い捨てのシンボル

適当なシンボルを生成したいときは、シンボルを生成してくれる手続きgensymを使えばいい。 gosh> (gensym) #:G1 とまあ、こんな感じ。 このgensymと伝統的なマクロを使って、id:yagiey:20100127:1264595558で定義したmy-orを書き直してみると (define-macro …

objectマクロを非R5RSマクロで

今回は勝手にシンボルをでっちあげて、新しい名前を作ってみる。 271ページの 例えば構造体を定義するマクロdefine-structを定義することを考えます。fileという構造体を定義し、それがnameというスロットを持つ場合、自動的にfile-nameというスロットアクセ…

新たな変数名の作成

id:yagiey:20100213:1266088272で 「新たな変数名を作り出す」という要請に対しての解決策という形で紹介される伝統的なマクロ とか言ったけど、 (define-macro (make-foo) 'foo) でも、立派に新しい名前を作ってると言えるよね。ただ、外側でfooが束縛され…