問題4.27 – SICP(計算機プログラムの構造と解釈)その201
問題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…続きを読む
問題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…続きを読む
問題4.26 unless 式を if 式に変換する手続き unless->if を作り、導出された式として実装する。 ここでは4.1.7節の評価器に実装する。 (define (analyze exp) (cond ((self-evaluating? exp) (analyze-self-evaluating exp)) ;; 省略 ((unless? exp) (analyze (un…続きを読む
問題4.25 (define (unless condition usual-value exceptional-value) (if condition exceptional-value usual-value)) (define (factorial n) (unless (= n 1) (* n (factorial (- n 1))) 1)) 作用的順序の Scheme では定義された …続きを読む
use utf8; をすると \s で全角空白(スペース)にもマッチするということでスクリプトを作っていたら、どうも上手く動作しないので調べてみると。\s で全角空白にマッチするのは UTF8 フラグが付いている文字列に対してらしい。 外部から読み込んだファイルの文字列には use utf8; しても UTF8 フラグが付かないので上手く動かなかったらしい。 そこで、外部から読み込んだ文字列は E…続きを読む
問題4.24 手続き driver-loop の eval 部分を time で計測する。 (define (driver-loop) (prompt-for-input input-prompt) (let ((input (read))) (let ((output (time (eval input the-global-environment)))) (announce-output ou…続きを読む
問題4.23 4.1.7節の本文の版の analyze-sequence と Alysa の版の analyze-sequence の lambda 式部分にリーダーマクロを設置して実行してみる。 4.1.7節の本文の版の analyze-sequence (define (analyze-sequence exps) (define (sequentially proc1 proc2) #?=(…続きを読む
"Perl で半角カナと全角カナの変換をする" の記事を書いたら、"404 Blog Not Found:perl – で全角半角変換をモダンに行う" という CORE Module のみを使う方法というのが返ってきたのだけれど、Perl 特有の"呪文"というか"記号のお化け"のようなコードで何をしているの…続きを読む
問題4.22 構文解析手続き analyze に let->combination を使った解析を追加する。 (define (analyze exp) (cond ((self-evaluating? exp) (analyze-self-evaluating exp)) … ((let? exp) (analyze (let->combination exp))) ((appl…続きを読む
CPAN 初回起動 $ sudo -H cpan この後 CPAN の設定をしていく。 CPAN 起動 $ sudo cpan cpan> CPAN モジュールのインストール cpan> install <モジュール名> CPAN 終了させる。 cpan> quit モジュールのインストールされた場所を確認 $ perldoc -ml <モジュール名>