2008-04-01から1ヶ月間の記事一覧

Python風ジェネレータを限定継続で

ここでいろいろ議論されてる、call/ccを使ったジェネレータを勉強がてらに限定継続で書き直してみる。トリッキーな部分がなくなって、かなり素直に書ける。 (define (make-generator f) (let ((cont #f)) (lambda () (reset (if cont (cont #f) (f (lambda (…

限定継続について勉強してみた

話題の限定継続についてこれで自習。意味論とか書いてあって難しそうだけど、とりあえず自分の分かる範囲で読み進める。ツッコミ歓迎です。まずは、call/ccのsemantics。 Eを評価すると1引数関数fになる。fはという関数に適用される。は「引数を1つとり、そ…

pdf

何百ページもあるようなpdfを読むときってどうするのがベストなんだろう? 個人的にはいろんなところに持って回って暇なときとかに読みたいから、PCで読み進めるというのはあまりおいしくない。 かと言って、全部(一遍にではなくとも)プリントアウトしてしま…

StateモナドをSchemeで

id:syd_sydさんにモナドについて教わって、ようやくStateモナドを理解できたのでとりあえずSchemeで書いてみた。出力(?)と状態の組は多値で表現。 (define (>>= m f) (lambda (s0) (receive (a s1) (run-state m s0) (run-state (f a) s1)))) (define (run-…

型推論

「君のお父さんもお母さんもO型ってことは、どうやら君もO型らしいね」 っていうネタを思いついた。

新しいPCが欲しい

半年前くらいから騙し騙し使ってきたノートPCがそろそろやばい。ACアダプタとの接触が悪いらしく、昨日今日に至ってはほとんどバッテリー稼動で、押さえてないと充電もされない状態。さすがにバッテリーにも精神衛生上もよくなさそうなので今週中に修理に出…

call/ccとvalues

# valuesをcall/ccで定義できる理由がよく分かりません。誰か対応するcall-with-valuesを見せてください みずぴー日記 call/cc版valuesに対応するcall-with-valuesがどうやって定義されるのかはよく分からないですが、call-with-valuesがあると継続が複数の…

internal defineのすすめ

末尾再帰という考えを知って間もない頃、関数の内部で関数を定義することにまだ違和感を持っていたので、named letを知ってからしばらくは末尾再帰で書けるものは何でもnamed letで書いていた。internal defineに馴れてnamed let狂いの時期が過ぎた頃からち…

valuesの定義

多値を返す関数valuesは、R5RSにおいて下のようにcall/ccを使って定義されていることは比較的有名なことと思う。 (define (values . args) (call/cc (lambda (cc) (apply cc args)))) ところが、2,3年ほど前Schemeをやり始めた頃に使っていたMIT-Schemeでは…

applyの定義

mapやreverse、append等の関数を定義しなさい、という練習問題はSchemeの本であればどれでも載せているようなものだけれども、applyを定義させるような問題はあまり見かけないように思う。もちろん、「SICPの4章5章あたりでevalと一緒に嫌というほど実装して…

はてなはじめました

id:mzpさんにほだされて(?)はてな始めました。 思ってたよりおもしろいかもしれない。馴染めばもっと便利になりそう。日記については筆不精なので書かなくなる可能性も高いけど、まぁしばらくはネタ(特にScheme他プログラミング関連の)を見つけて更新してい…