The Art of the Metaobject Protocol 1章まで読んだ

MOP

ちまちま読んでるので、ようやく1章を読み終えて今は2章の途中。1章では、ClosetteというCLOSのサブセットを作ることによってMOPの仕組みを学ぶ。読み始める前は、メタオブジェクトというと「何やら抽象的でよく分からないもの」という印象だったのだけど、 …

第4回SICP勉強会

今回は1.2.2 木構造再帰と1.2.3 増加の程度について。ようやく勉強会らしくなってきた感じ。問題1.14のcount-changeのステップ数のオーダを求めるのでかなりてこずってたけど、id:banjunの解法により、どうやらO(n^5)らしいということで解決ということに。…

The Art of the Metaobject Protocol

The Art of the Metaobject Protocol作者: Gregor Kiczales,Jim des Rivieres,Daniel G. Bobrow出版社/メーカー: The MIT Press発売日: 1991/07/30メディア: ペーパーバック クリック: 35回この商品を含むブログ (14件) を見る積ん読状態の本が溜まってるの…

コメントの削除

ソースコードからコメント部分を削除するプログラム decomment を書いてください. すくなくとも,decomment を記述したのと同じ言語で書かれているソースコードが 扱えるようにしてください. どう書く?org (use file.util) (define (main args) (dolist (…

チョコレートパズルを継続渡しで(30分で解けるようになった)

ペントミノ パズル(明治ミルクチョコパズル)をGaucheで解く(1時間で解けるようになった) - Gemmaの日記とのことなのでここは意地で対抗。id:Gemmaさんの初めのコードと同様、重複を除去してなかったのでそれを検討。いろいろ思案してたけど、よくよく考えて…

チョコレートパズルを継続渡しで

以前に作ったチョコレートパズルを継続渡しで解くプログラムを見つけた。せっかくなので載っけとく。継続を使ったサンプルプログラムって結構数が少なかったりする(と思う)ので、まぁ誰かの参考になれば嬉しい限り。チョコレートパズルについて詳しくは各自…

PLT Scheme version 4.0 is now available

PLT Scheme version 4.0 is now available from http://plt-scheme.org/This major new release offers many improvements over version 372, and we encourage everyone to upgrade. The Racket Blog とのこと。PLT Schemeはあんまり使ったことないけど、以…

チケット購入

火曜日の話だからちょっと時間が経ってるけど、LL Futureのチケットを購入。一応Tシャツ付き。

私をLL Futureに連れてって

是非誰か。ってまだチケット売り切れてないんかな? LL 2008 実行委員のともだちから「今年の LL 2008 には Larry Wall が来るかもよ」というささやきを受けた。早速ローソンに走るワタシ。 絶対に失敗しない LL2008 チケット入手@ガンダム風 - 8tree にっき…

評価戦略

正規順序や作用的順序などについて、もう一度調べてまとめようと思ってたけど、Wikipediaに詳しくまとめられてたのでそちらで代用。 Evaluation strategy - Wikipedia, the free encyclopedia 評価戦略 - Wikipedia ところで、厳密にいえば作用的順序もcall …

第2回SICP勉強会

今回はSchemeのイントロダクション。「Schemeでは+や-も関数で、前置記法で書くよー」とか「定義はdefineで書くよー」とか。 しかし、人にものを教えるっていうのは想像以上に難しい。特殊形式の説明でパニクりました(始終パニクってたという見方も)。それか…

Types and Programming Languages

Types and Programming Languages作者: Benjamin C. Pierce出版社/メーカー: The MIT Press発売日: 2002/01/04メディア: ハードカバー購入: 5人 クリック: 86回この商品を含むブログ (52件) を見る卒研のためにTAPLをチビチビ読み進めてます。と言ってもすべ…

与えられた木から、子→親への対応を作る

与えられた木から、子→親への対応を作るより。 (define (get-parent-alist tree) (define (rec root children) (append-map (lambda (child) (acons (car child) root (rec (car child) (cdr child)))) children)) (rec (car tree) (cdr tree))) 15分強。app…

Project おいら

Project Eulerにあらず。自分で思いついた問題を自分で解く試み。 というか、偶然直面した問題を、抽象化して手を加えたらパズルのような問題になったので、とりあえず解いてみたってだけ。非負整数を1個以上の0以上(または1以上)の整数の和の形で表す表し方…

プログラミングに数学は不要?

あなたがプログラムを理解できない10の理由:第2回 - builder by ZDNet Japanより。 しかし、本当に数学の知識が必要になってくるのは、ゲームのプログラムや科学技術計算をするような高度なプログラムが必要になった時だ。PHPや JavaScript、ActionScriptな…

限定継続について勉強してみた(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狂いの時期が過ぎた頃からち…