問題4.31 – SICP(計算機プログラムの構造と解釈)その205
問題4.31 この問題は、参考サイト(SICP 4.2.2 Ex. 4.27 Ex. 4.28 Ex. 4.29 Ex. 4.30 Ex. 4.31 – nakayama-blog)の写経で済ませる。 make-procedure にリーダーマクロを付けて modifier の状態を可視化する。 (define (make-procedure parameters body env) …続きを読む
問題4.31 この問題は、参考サイト(SICP 4.2.2 Ex. 4.27 Ex. 4.28 Ex. 4.29 Ex. 4.30 Ex. 4.31 – nakayama-blog)の写経で済ませる。 make-procedure にリーダーマクロを付けて modifier の状態を可視化する。 (define (make-procedure parameters body env) …続きを読む
問題4.30 並びの中の式の内、最後の式以外(途中の式)の引数は評価されず遅延される。 途中の式でも基本手続きの場合はその引数は評価される。 並び(元々のバージョン) (define (eval-sequence exps env) (cond ((last-exp? exps) (eval (first-exp exps) env)) (else (eval (first-exp exps) e…続きを読む
最初、tr で変換すると文字化けしてしまった。tr で日本語を使うには require "jcode" する必要があるらしい。 #!/usr/bin/env ruby -w # -*- coding: utf-8 -*- $KCODE = "u" require "jcode" # String クラスの tr メソッドで日本語を使用可能…続きを読む
Mac OSX 版の Firefox 3.5 のタブの色が変化に乏しく、現在のページのタブが分かりにくいので userChrome.css に以下のコードを記述して見やすくした。 tab { color: #333333 !important; } tab[selected="true"] { color: #000000 !important; background-colo…続きを読む
Firefox 3.5 RC1 が公開されたので、そろそろ新バージョンへの移行の準備を始める。 個人的に利用頻度の高い拡張機能の対応バージョンを調べた。 拡張のバージョンと、その対応 Firefox バージョンは2009年6月18日現在のもの。(2009年6月28日更新、Live HTTP Headers)(2009年7月12日更新、YSlow) ほとんどの拡張機能が 3.5 にまで対応していた。…続きを読む
問題4.29 メモ化しない force-it (define (force-it obj) (if (thunk? obj) (actual-value (thunk-exp obj) (thunk-env obj)) obj)) メモ化した force-it (define (force-it obj) (cond ((thunk? obj) (let ((result (actual-valu…続きを読む
text.tr モジュールを使って Gauche で "ひらがな<->カタカナ" の変換をする。 (use text.tr) (define (kana-translator from to) (define (translator str) (with-string-io str (lambda () (let ((ptr (tr from to))) (let …続きを読む
問題4.28 演算子が手続きの場合に、演算子を強制する必要がある。 演算子の強制をする場合 ((application? exp) (apply (actual-value (operator exp) env) (operands exp) env)) ;;; L-Eval input: (define (foo x) (+ x 1)) ;;; L-Eval value: ok ;;; L-Ev…続きを読む
問題4.27 (define count 0) (define (id x) (set! count (+ count 1)) x) (define w (id (id 10))) 作用的順序の評価器の場合 w を定義した時点で手続き id が2つとも評価されるので (set! count (+ count 1)) が2回実行されて count の評価結果は 2 となる。 count gosh&g…続きを読む
遅延評価できるように修正された評価器のコード ;; 基盤の apply への参照を apply-in-underlying-scheme へ退避させる(こうすることで、基盤の apply に apply-in-underlying-scheme という名前でアクセスできる)。 (define apply-in-underlying-scheme apply) ;;;; apply の定義 (def…続きを読む