プログラミング再入門

プログラミングをもう一度ちゃんと勉強する読書ノート

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

Scheme修行 第19章 宝石泥棒(その2)

ここでは文字列解析のtokenizerの様な挙動が紹介されます。木構造のデータを与えると、その中の最も左に出現するアトムを返す。次に呼び出すと次ぎに左側のアトムを返す、と言った挙動です。極めて手続き的と言うか。アトムが見つかった時点で継続を使って脱…

Scheme修行 第19章 宝石泥棒(その1)

Scheme固有の継続の使用方法を習います。 ノート: deepB まず、deepのおさらい。 > (deep 6) ((((((pizza)))))) > deepB 再帰の果てにmが0になった時点でletcc (call-with-current-continuation)して続きの関数を大域変数のtoppingsに設定している事以外は…

Scheme修行 第18章 我変わる、ゆえに我同じなり!

consセルをクロージャーで実現する話。そう言えばSICPでも同じ事をしていた様な…。この章を読んで始めて第6章で登場する『影法師(shadow)』の意味が分かりました。影法師とは同じ事を表現する別の実装の事を指している様です。第6章では普通のS式ではな…

Scheme修行 第17章 我変わる、ゆえに我あり!

計算の結果を保存しておいたり、途中の状況を保存しておく手法を習います。 ノート: deep 最初のdeepの定義は特にメモは保存しないその場限りの定義。関数deepは 引数mに適用する mが0であれば、アトムpizzaである mが0でなければ、(deep (sub1 m))をリスト…

Scheme修行 第16章 位置について、セット、バン!(その2)

set!を使って、グローバルな関数名を参照せずに再帰を行うテクニックを習います。 ノート: length まずは元のlengthの定義から出発。 このlengthと言う名前はグローバルな名前で定義の中から参照している。lengthは組み込み関数として既に定義されているの…

Scheme修行 第16章 位置について、セット、バン!(その1)

set!を使ったテクニックの続きです。 ノート: sweet-tooth 内容的に目新しい事は無いが、やり取りを実際に確かめてみる。 > (define sweet-tooth (lambda (food) (cons food (cons (quote cake) (quote ()))))) > (define last (quote angelfood)) > (let (…

Scheme修行 第15章 大人と子供の違い……

この章ではset!を習います。また分かりにくい形でlambdaが作るクロージャに変数を取り込む方法も習います。これを用いると特定の関数からのみ参照出来る、C言語で言う所の関数内static変数に相当する変数が作れます。 ノート: set! 特に明記されていないが…

Scheme修行 第14章 名前をつけましょう(その3)

式の値を無視して、複数の式を評価するケースを習います。関数値としてはletccにジャンプする事で返すので、途中の段階では関数値を返す必要がありません。 ノート: leftmost leftmostを思い出しましたか。 は話の繋がりが分からないが、原文は『Do you rec…

Scheme修行 第14章 名前をつけましょう(その2)

letを使って余計な計算を避ける方法を習います。 ノート: depth* depth*は 木に適用する関数で 数を値とする その値は 木が空リストであれば、1 木の先頭要素がアトムであれば、木の残り部分にdepth*を適用した値 そうでなければ、 木の先頭より後ろにdepth…