2007-03-01から1ヶ月間の記事一覧

*1175152529*[SICP] 2.2 階層データ構造と閉包性

2.2.1 並びの表現 問題2.17 ;; lのcdrが空リストならlのcarのリスト ;; そうでなければ、lのcdrのlast-pair (define (last-pair l) (if (null? (cdr l)) (list (car l)) (last-pair (cdr l)))) 問題2.18 ;; 反復的('()はnil) (define (reverse l) (define (i…

2.1 データ抽象入門

2.1.1 例: 有理数の算術演算 P49のmake-ratの実装の変更は使用している部分の変更を必要としないから、データ抽象が行えている。 (define (add-rat x y) (make-rat (+ (* (number x) (denom y)) (* (number y) (denom x))) (* (denom x) (denom y)))) (defin…

*1174724256*[SICP]第二章 データによる抽象の構築

1章では手続きによる計算プロセスの抽象を学んだ。2章ではデータオブジェクトの表現(実装)と使用を分離するデータ抽象を学ぶ。

一章の復習

置き換えモデルは、手続きの適用をその定義で置き換えていくこと。置き換えモデルには作用的順序と正規順序があり、前者は披演算子を先に置き換え、後者は演算子(一番外側の手続き)からおきかえていく。作用的順序は一番内側から置き換えていくので最内簡…

1.3 高階手続きによる抽象

高階手続き(手続きを返したり受け取ったりする手続き)による強力な抽象の力を見ていく。 1.3.1 引数としての手続き 問題1.29 (define (inc n) (+ n 1)) (define (cube n) (* n n n)) (define (sum term a next b) (if (> a b) 0 (+ (term a) (sum term (ne…

最近Google Readerが"Oops!"とばかり言う

のですが。。

1.2 手続きとその生成するプロセス

視覚化大事ね。 1.2.1 線形再帰と反復 遅延演算が山なりに増えて減るのが再帰的プロセス。特に遅延演算の列の長さが入力に対して線形に増えていくと線形再帰的プロセス。プロセスの長さが伸び縮みしないのが反復的プロセス。とくに必要なステップ数が線形に…

関数呼び出しを木構造で表示

SICPで関数の呼出を木構造で表示する問題がでてきたけど、これを手で書くのは大変。というわけで、Schemeでマクロを使って、呼出の木を自動で表示するのを作りました.slibのtraceと大体同じです。場合によっては、traceよりも見やすくなると思います.木で表…