プログラミング再入門

プログラミングをもう一度ちゃんと勉強する読書ノート

2013-01-01から1年間の記事一覧

SICP 2.3.2 Example: Symbolic Differentiation

数値計算的な微分ではなくて代数的に数式そのものを扱った微分。 Lispにとっては昔から重要なテーマで、シンボルを扱えるプログラミング言語を開発する動機になっていたとの事。まぁ、確かにFORTRANでは難しい。 ノート The differentiation program with ab…

SICP 2.3 Symbolic Data

『シンボル』 All the compound data objects we have used so far were constructed ultimately from numbers. これまで数しか扱って来なかった、と書いてあるが実は数と手続きを扱った気が。C言語から入った人にとってシンボルはちょっと分かりにくい。変…

SICP 2.2.4 Example: A Picture Language

ここでは再びDrRacket+PLaneTのSICPサポートを使います。 http://planet.racket-lang.org/package-source/soegaard/sicp.plt/2/1/planet-docs/sicp-manual/index.html ノート 巷ではそのまま『図形言語』と訳している模様。 The picture language 最初のうち…

SICP 2.2.3 Sequences as Conventional Interfaces

前節ではデータ構造を抽象化する事でデータ構造の詳細に触れる事なくプログラムが作れる事、逆にプログラムに影響を与える事なくデータ構造を変更出来る事を習ったんですね。 タイトルのconventionalの解釈が難しいですが、従来からあるとか慣例的とかだと今…

SICP 2.2.2 Hierarchical Structures

ノート 階層構造。リストの要素としてリストを含む構造。木構造。 データ構造が再帰的な場合それを扱う関数も再帰的に定義するのが自然。 Exercise 2.24 (list 1 (list 2 (list 3 4))) を図2.6の様な木構造の図にすると。(微妙に節の部分の表現が違うけど)…

SICP 2.2 Hierarchical Data and the Closure Property

漸く『データ構造』っぽい話。 ノート 階層データと閉包特性。 よくLISPの説明で見かけるcons cellの構造の図はbox-and-pointer notationと呼ぶらしい。 cell自体はポインタの組。ポインタの先は別のcons cellかbox。boxの中身は既出で言うと整数、小数、分…

SICP 2.1.4 Extended Exercise: Interval Arithmetic

ノート 追加演習?幅を持った値の算術。Alyssa P. Hackerちゃんが誤差範囲(?)を持った数値の演算を支援するシステムを作成していると言う。 例えば並列に繋いだ二つの抵抗器の合成の抵抗値の計算。抵抗器は抵抗値に対して一定の誤差範囲が定義されている…

SICP 2.1.3 What Is Meant by Data?

ノート Dataとは何を表しているのか。 In general, we can think of data as defined by some collection of selectors and constructors, together with specified conditions that these procedures must fulfill in order to be a valid representation. …

SICP 2.1.2 Abstraction Barriers

インターフェースを介して実装の詳細を隠すカプセル化に通じるお話。 ノート barrierは囲い、防護壁。抽象化の境界線、と言った感じか。 the underlying idea of data abstraction is to identify for each type of data object a basic set of operations i…

SICP 2 Building Abstractions with Data

第1章では手続きの作り方、性質、抽象化・一般化の方法を学びましたが、この章はデータ構造の話な模様。 ノート 例えば有理数を扱う場合、分子・分母のペアを一塊のデータとして扱えるとプログラムがすっきり書ける。複合データが内部的にどう表現されてい…

SICP 1.3.4 Procedures as Returned Values

戻り値としての手続き。 ノート Average dumpを使ったsqrtの定義は、 (define (sqrt x) (fixed-point (lambda (y) (average y (/ x y))) 1.0)) y ⇒ x/yと言う定義の形を崩してしまっている。(lambda (y) (/ x y))と言う形をそのまま使う為には、yを受け取っ…

SICP 1.3.3 Procedures as General Methods

ノート 汎用メソッドとしての手続き。 Finding roots of equations by the half-interval method 二分方による方程式の解(根)。f(a) 紹介されている定義を実際に動かしてみる。追加で必要な関数はaverageのみ。 (define (average a b) (/ (+ a b) 2)) 実行…

SICP 1.3.2 Constructing Procedures Using Lambda

ノート lambdaを使った手続きの構築。 ほんの小さな、かつその場限りの関数にいちいち名前を付けなければならないのは面倒。関数を定義するときのdefineはlambdaを使った表記の省略形である。 Schemeではlamdaをそのままオペレータとしてリストの先頭で使う…

SICP 1.3 Formulating Abstractions with Higher-Order Procedures

ノート そのまま訳すと『高階手続きによる抽象の定式化』か。単に定式化とするか抽象化とする方がピンときそう。引数を使って具体的な数値あるいは変数から切り離して値の操作を手続きとして纏める事もひとつの抽象化であると。普通の言語は一連の操作のパタ…

SICP 1.2.6 Example: Testing for Primality

整数計算のなかなか難しい話が沢山出て来ますが、調べまくった内容を兎に角メモしておきます。 ノート 例:素数判定 Searching for divisors(約数を探す) 基本的には2から始めて順に割り切れるかを確かめる。問題はいくつまで確かめれば十分なのか。n/2よ…

SICP 1.2.5 Greatest Common Divisors

引き続き整数計算の世界。 ノート 最大公約数。第2章で有理数(分数で表せる数)の計算を実装する事になるが、約分の際にGCDが計算出来る必要がある。 ユークリッドの互除法 aをbで割った時の余りをrとした時、aとbの最大公約数はbとrの最大公約数に等しい…

SICP 1.2.4 Exponentiation

ノート 冪乗。 b8を計算するのにb×b×b×b×b×b×b×bと計算するより、b2=b×b、b4=b2×b2、b8=b4×b4とした方が効率的。 nが偶数の時、bn=(bn/2)2、 nが奇数の時、bn=b×bn-1 とするとかけ算の回数を減らせる。 Exercise 1.16 bnを求める。 iterative procedureの引…

SICP 1.2.3 Orders of Growth

ノート 成長の次数。あるいは計算量の成長度合い。 入力の大きさとしては引数の値そのものだったり計算の精度だったり。計算量の尺度も計算のステップ数だったり必要なメモリサイズだったり。 と表現する。良く見かけるO記法とは実は少し違うらしい。 Θ記法…

SICP 1.2.2 Tree Recursion

3ヶ月ぶりの更新と書いたのが8月25日。それから4ヶ月。少しずつ読み進めて入るのですがまたまた久しぶりのアップデートとなりました。手続き呼び出しが実行されて行く様子の勉強の続きです。 ノート 計算過程が木構造になる例。数学的定義をそのままプログラ…