SICP

SICPの日記について

SICPの日記をこちらのSICPグループのページに移動しました。dorayakitaroのSICP日記 - sicp

SICP独習会 並びの演算2 (問題2.36〜)

問題2.36 さっぱりわからず、解答を見ることに。 define(accumulater-n op init seqs) (if (null? (car seqs)) '() (cons (accumulater op init (map car seqs)) (accumulater-n op init (map cdr seqs))))) gosh> (accumulater-n + 0 (list (list 1 2 3) (l…

SICP独習会 並びの演算(問題2.33〜)

問題2.33 この問題を解くには、定義する手続きを、accumulate(積み上げる)という単語を使って説明できなければ解くことができないと思う。 で、mapは最初このように定義した。 現在の要素と、次の要素を、与えられた手続きを作用させる。作用させた要素をacc…

SICP独習会 木の写像 (問題2.30〜)

問題2.30 高階手続きを使わない版 (define (square-tree tree) (cond ((null? tree) '()) ((not (pair? tree)) (* tree tree)) (else (cons (square-tree (car tree)) (square-tree (cdr tree)))))) 高階手続きを使う版 (define (square-tree tree) (map (la…

SICP独習会 階層構造(問題2.24〜)

この節では、リストを使って木構造を表現しています。ここから、込みいったリストの使い方をしてくるので、リストについて理解しておかないと、キツくなってきます。(←私)

SICP独習会 リストの写像(問題2.21〜)

ここではリストの各要素に対して、なんらかの作用させる手続きを定義する。例として、 リストの各要素の値を、n倍する手続きscale-list scale-listをより抽象化した手続きmap が定められている。

SICP独習会 拡張問題:区間算術演算(問題2.7〜)

問題2.7 (define (lower-bound x) (car x)) (define (upper-bound x) (cdr x)) 問題2.8 (define (sub-interval x y) (make-interval (- (lower-interval x) (lower-interval y)) (- (upper-interval x) (upper-interval y)))) 問題2.9〜問題2.16 段々こみい…

SICP独習会 リスト演算(問題2.17〜)

この節では、リストを操作する手続きを作成する。例題として、 リストの各要素にアクセスする手続き(配列のように扱う) list-ref リストの要素の個数をかえす手続き length 二つのリストを連結する手続き append が、提示してあった。 これらの手続きを利用…

SICP独習会〜データとは何か(問題2.4〜)〜

ここでデータの定義にふれているのだが、いまいち言っていることが飲み込めないでいる。ここはしばらくしたら、もう一度読み直した方がよさそうである。

SICP独習会〜抽象の壁(問題2.2〜2.3)〜

問題2.2 (define (make-segment x y) (cons x y)) (define (start-segment x) (car x)) (define (end-segment x) (cdr x)) (define (make-point a b) (cons a b)) (define (x-point x) (car x)) (define (y-point y) (cdr y)) (define (midpoint-segment a) …

SICP独習会「一般方法としての手続き」(問題1.35〜)

この辺は正直、例題が難しく(数値計算問題的に)、実際に手を動かすことができなかった。おそらく言ってることとしては、「適切なレベルで抽象化しろ」ということなんだろうけど。なにか良い例題の代わりとなる問題を見つけたり、思いついたりしたら書こう…

SICP独習会〜有理数の表現(問題2.1)〜

問題2.1 正負の有理数を扱えるようにする。以下が、とりあえず書いてみたソース。 (define (make-rat n d) (cond ((or (and (< n 0) (< d 0)) (and (> n 0) (> d 0))) (cons n d)) ((or (and (< n 0) (> d 0)) (and (> n 0) (< d 0))) (cons -n d)))) で実行…

SICP独習会 目次

計算機プログラムの構造と解釈作者: ジェラルド・ジェイサスマン,ジュリーサスマン,ハロルドエイブルソン,Gerald Jay Sussman,Julie Sussman,Harold Abelson,和田英一出版社/メーカー: ピアソンエデュケーション発売日: 2000/02メディア: 単行本購入: 35人 …

SICP解答メモ&解説 (問題1.29〜問題1.33)

問題1.29 全然わからんのでパス 問題1.30 (define (sum term a next b) (define (iter a result) (if (> a b) result (iter (next a) (+ result (term a))))) (iter a 0)) 問題1.31 再帰プロセス版 (define (product a b term next) (if (> a b) 1 (* (term …

反復プロセス練習!!練習!!練習!!

コツとしては「再帰式を積み上げる」感じで書くとうまくいくことが多いみたいです。問題はSICPとか数学の有名な漸化式の問題から拝借しました。 階乗計算 階乗を計算する手続きを、反復プロセスで定義せよ。再帰プロセス版は以下の通り。 (define (fact-recu…

SICP解答メモ&解説 (問題1.11〜問題1.13)

問題1.11 とりあえず再帰プロセスの手続きを書いてみよう。 (define (f n) (if (< n 3) n (+ (f (- n 1)) (* 2 (f (- n 2))) (* 3 (f (- n 3)))))) これは定義式をそのまま書くだけので楽。で、実行結果はこうなった。 gosh> (f 3) CALL f 3 ----------f(n -…

SICP解答メモ&解説 (問題1.9〜問題1.10)

問題1.9 以下の手続きを考える。 (define (+ a b) (if (= a 0) b (inc (+ (dec a) b)))) (define (+ a b) (if (= a 0) b (+ (dec a ) (inc b)))) 一つ目の手続きを置き換えると (inc (+ (dec 4) 5)) (inc (inc (+ (dec 3) 5))) (inc (inc (inc (+ (dec 2) 5)…

SICP解答メモ&解説(問題1.6〜問題1.8)

問題1.6 新たに手続き「newif」を定義して実行すると、解釈系は「newif」を普通の手続きとして処理する。 解釈系は作用的順序の (good-enought? guess x) guess (sqrt-iter (improve guess x) x) newif 順で処理することになる。「new-if」の三番目の引数の…

SICPの解答集のリンク

id:higeponさんのSICPの記事を参考にさせていただいてSICPをマイペースに読んでます。そこで関数型言語の勉強にSICPを読もう - (5) 1章 - 小休止 Schemeの情報源の記事の解答集へのリンクが切れてしまっていたので、ここに新しくリンクを張らせていただきま…