SICP

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 (iter l r) (if (nul…

2.2 階層データ構造と閉包性

箱とポインタ記法(box-and-pointer notation))は今後使いそうなので覚えておこう。オブジェクトを組み合わせる演算(例えばconsとか)の結果に、またその演算を使えるときその演算は閉包性を満足する。 ちなみに、プログラミング言語の機能で最近良く耳にす…

3章終わった!

あー、長かった。次は楽しみにしてた4章だ!!

2.4抽象データの多重表現

(define (add-complex z1 z2) (make-from-real-imag (+ (real-part z1) (real-part z2)) (+ (imag-part z1) (imag-part z2)))) (define (sub-complex z1 z2) (make-from-real-imag (- (real-part z1) (real-part z2)) (- (imag-part z1) (imag-part z2)))) (…

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…

一章の復習

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

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…

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

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

第1章 手続きによる抽象の構築

計算プロセスは計算機野中に済む抽象的な存在 プロセスはデータを操作する。プログラムはプロセスに指示を与えるために作る。なるほど。

1.1 プログラムの要素

手続きとデータがそれほど違わないというのは,P164の脚注に書いてある。手続きをデータのように見ることも,データを手続きのように見ることもできるというわけだ。 1.1.1 式 1.1.2 名前と環境 名前とオブジェクトの対が環境。 1.1.3 組み合わせの評価 1.1.…

SICPを読みはじめる

ここ1年くらいでOCaml,Haskell,Schemeという関数型言語に触ってきた. SICPは関数型言語を学ぶ上での聖典的存在らしいので、これは読まなくては!ということで、 読み進めていきたいと思う.