2008-01-01から1年間の記事一覧

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

日にちが開いてしまったけれど、前回の続き。 まず、meta continuation、メタ継続について。メタ継続とはつまり、「継続の継続」のことで、次のような動機により導入される概念らしい。resetとshiftの継続意味論を再掲。 ここで、resetがnon-tail callを含ん…

データ構造

データ構造は中国では、「資料結構」というらしい。 「資料」も「結構」も日本語にあるのに、両方とも別の意味に使われているのは面白い。「結構」という語は、ポインタを張り巡らせたような複雑なデータ構造の様子をうまく表しているような気がするなぁ、結…

ビューティフルコード

Beautiful Code: Leading Programmers Explain How They Think (Theory in Practice (O'Reilly))作者: Andy Oram,Greg Wilson出版社/メーカー: Oreilly & Associates Inc発売日: 2007/06/26メディア: ペーパーバック購入: 4人 クリック: 96回この商品を含む…

モナドっていうのはつまり

SchemeでPostScriptするライブラリ Tiny-PS 作ったよ - [・ _ゝ・]日記を書くはやみずさんののことなのか。クラスのインスタンスに、movetoメソッドとかlinetoメソッドとかを適用すると、どのメソッドが適用されたかがインスタンスのps-stackにプッシュされ…

コンパイラを学ぶ理由

この1週間ほど、3imp(Three implementation models for scheme)を読み進めている。3impは、Schemeのコンパイラをヒープベース、スタックベース、ストリングベース(コントラバスのことではない)という3つの実装方法で説明した資料。 今は4章のスタックベース…

SICP勉強会

念願のSICP勉強会を行う運びとなりました。 いい機会だからいろんな人をSchemerに取り込めるように頑張りたいですね。とは言うものの、勉強会って人生初経験なんでどうやって進めていけばいいのか全く分からないのだけど。 第1回まで2週間ほど時間があるから…

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他プログラミング関連の)を見つけて更新してい…