2008-02-01から1ヶ月間の記事一覧

問題2-40〜41

写像の入れ子に関する問題です。accumulateの入れ子を利用して、より高度な問題を解いていきます。 まずは、渡された引数よりも小さな数の対を全て洗い出す処理を書きます。flatmapを利用することで、mapした結果をリスト化することができ、これにより、入れ…

問題2-33〜36

「公認インターフェイスとしての並び」に関する部分を読み進めています。accumulateというインターフェイスを使ってどんなことができるのかということを試す問題に少しずつ取り組んでいます。 accumulate手続きの実装は、以下のようになっています。三つ目の引…

問題2-37

マトリックス(行列)に関する問題です。行列については、遠山啓氏の『数学入門』にちょっとだけ登場した概念で、いまいち理解を深められなかった部分であり、また興味深い部分でもあったわけですが、この問題を解きながら、その興味をより一層深めることがで…

問題2-38〜39

accumulate手続きは、先頭の要素を起点にして右側の要素を組み合わせていくものですが、それとは逆の方向から組み合わせるとどうなるのか。これを確かめる問題に取り組みました。 まずは、本に掲載されているそれぞれの手続きを定義します。fold-rightはaccu…

問題2-29

二進モービル問題です。頭の中で振り子を想像しながら、問題に取り組んでいきました。 まずは、モービルから枝の要素を取得する処理と、枝から長さとそれ自身(重量か、子モービル)を取得する処理を書きました。 (define (make-mobile left right) (list left…

問題2-30〜31

木の写像に関する問題です。treeの全ての要素に何らかの処理を加える手法を模索していきます。 まず問題2-30ですが、例題手続きを応用して、全ての要素を二乗するための手続きを書きます。 (define sample-tree (list 1 (list 2 (list 3 4) 5) (list 6 7))) …

問題2-24〜28

今日は、階層構造を操作するための練習問題に取り組みました。以下、それぞれの階層構造とそれの評価結果を羅列します。 まずは、問題2-24です。 (define x (list 1 (list 2 (list 3 4)))) x =>(1 (2 (3 4))) 次は、問題2-25です。リストの後方部分を取り出…

問題2-17〜18

リストを操作する練習です。nilの扱いやリスト結合のやり方には、まだまだ慣れていません。 問題2-17は、リストの最後の要素を取り出すための手続きです。cdrを連発して、cdrがnilだったらそれが最後の要素なので、その構成物のcarを返します。 (define (las…

問題2-20

2〜3日前に取り組んだ時は、頭がこんがらがってしまって途中で断念してしまいましたが、id:higeponさんのエントリーを参考にしながら、落ち着いて再考してみました。 大前提として、偶数・奇数を判別する基本手続きがあります。 (even? 10) (odd? 10) =>#t =…

問題2-21〜22

mapを使い、一段抽象の壁を作ってみるための問題です。 まずは、問題2-21の穴埋め問題です。 (define (map proc items) (if (null? items) '() (cons (proc (car items)) (map proc (cdr items))))) (define (square x) (* x x)) (define (square-list1 item…

問題2-23

mapに似ているfor-each手続きです。今日は気力が尽きてきたので、上手くいかなかったパターンと、上手くいっているっぽいパターンをアップするだけにします。 (define (for-each proc items) (if (null? items) '() ((proc (car items)) (for-each proc (cdr…

2.1.4 拡張問題:区間算術演算(2)

仕様変更に伴い、区間オブジェクトのコンストラクターを書き替えます。中央値を相対許容誤差を引数とする手続きと、区間オブジェクトから、中央値と相対許容誤差を取得するための手続きです。(問題2-12) (define (make-center-percent c p) (define per-hand…

2.1.4 拡張問題:区間算術演算(1)

Alyssaの最初の仮定は、抵抗の上限値と下限値を「区間オブジェクト」として扱うことです。二つの抵抗の区間の和を求める場合(R1 + R2)は、それぞれの上限値と下限値を足した値を、合成区間オブジェクトの上限値と下限値としています。二つの抵抗の区間の積(R1 …

問題2-1

負の有理数を正規化するmake-ratを作成する問題です。簡単だと甘く見ていたら、最初は上手くいきませんでした。 (define (gcd a b) (if (= b 0) a (gcd b (remainder a b)))) (define (make-rat n d) (let ((g (gcd n d))) (cond ((and (> 0 n) (> 0 d)) (co…

問題2-2〜3

この二問は平面上の座標を扱う問題です。まずは、問題2-2のコードです。マイナスの座標軸でも正しくmidpointを算出できるかどうかは確認していません。おそらくダメでしょう。 (define (make-segment start-segment end-segment) (cons start-segment end-se…

問題2-6・所感

Church数(Church numerals)に関するこの問題を自力で解くのは難しいと判断したので、ウェブで模範解答を探してみました。すると、id:tanakaBoxさんの素晴らしい解説を見つけ、またdankogaiさんの関連エントリーも発見することができて、とても良い刺激を受け…

問題2-4/2-6

第二章の問題を一つずつ解いていこうと先へ進んでいますが、問題2-6で大きくつまずいてしまいました。lambdaが連鎖している状況で、どのように手続きが評価されていくのかということを理解していないと先へは進めないと感じたので、それに近いことやらなけれ…

議事録(第五-六回目)

先週行われた二回の勉強会を経て、SICPの第一章を読み終えることができました。「微分するとはどういうことか」「不動点とは何か」という数学的な事柄についても理解を少し深めることができました。特に最終問題の模範解答を見た時の驚きはかなり大きいものでし…