2008-04-25から1日間の記事一覧

SICPを読む(98) 問題 3.9 - 評価モデル

どうもSICPの評価モデルの解説が曖昧だ。返された値がどうなるかについて解説されていないので、おかしな図になってる。 Scheme実装中なので、僕の実装で書いてみよう。 問題 3.9 階乗の再帰と反復を環境モデルで表せ。という問題。 (factional 3)で先に反復…

SICPを読む(97) 問題 3.8 - 命令プログラミングの落とし穴

問題を読み取れているのかわからない。 問題 3.8 最初に関数が呼ばれたのであれば、その値を返す。二度目以降なら0を返す。という関数にしてみた。 (define f (let ((flag #f)) (lambda (n) (if flag 0 (begin (set! flag #t) n))))) フラグが立っていなけれ…

SICPを読む(96) 問題 3.7 - 共同口座

ムズイな。 問題 3.7 パスワードつき銀行口座を改造して、共同口座を作れ。という問題。口座は同じで、パスワードが違うように設定する。 問題は、パスワードを変更してしまうと、引きずられて、元のパスワードまで変わってしまう点。ユーザーオブジェクトを…

SICPを読む(95) 3.1.3 - 代入を取り入れた対価

代入を取り入れた対価に関する解説を読む。 関数型プログラミングの素晴らしさのひとつは、デバッグのしやすさだ。 (define (square x) (* x x)) と定めたら、(square 2)は4。変わらない。絶対変わらない保障がある。バグをはっきり追える。 命令型プログラ…

SICPを読む(94) 問題 3.6 - 乱数発生器改

嗚呼、Schemeすることは難しい事じゃない。ただ脳に身を任せ・・・(謎 問題 3.6 乱数発生器を改造して、resetを付ける問題。generateは要らないと思うので、無くした。 (define random-init 12345) (define (rand-update x) (modulo (+ (* 214013 x) 253011…

SICPを読む(94) 問題 3.5 - モンテカルロ法による定積分

出ました。セキブン。 問題 3.5 モンテカルロ法を使って、定積分せよという問題。前前回の応用編。 まず、x1,x2,y1,y2という範囲を設定する。x1 範囲x1〜x2までの範囲をランダムにプロットしたいので、0〜1 * (x1 - x2) - x1として、x1〜x2を作る。 f(x1〜x2…

SICPを読む(99) 問題 3.10 - 局所変数の入れ物とフレーム

うぅん。SICPの説明がなんか納得いかない。 問題 3.10 make-withdrawのletをlambdaに書き直して、環境モデルを書き直す問題。 (define (make-withdraw internal-amount) ((lambda (balance) (lambda (amount) (if (>= balance amount) (begin (set! balance …