Hatena::Groupsicp

a666666の日記 このページをアンテナに追加 RSSフィード

2008-10-05

1.1.3 組み合せの評価

| 02:32 | 1.1.3 組み合せの評価 - a666666の日記 を含むブックマーク はてなブックマーク - 1.1.3 組み合せの評価 - a666666の日記 1.1.3 組み合せの評価 - a666666の日記 のブックマークコメント

ちょっとだけ読む時間はあるけどブログに書きながら勉強する時間はなかなか取りづらいなぁ。



再帰」という言葉が出てきた

再帰的 recursive

組み合わせ(合成)を評価するには、

  1. 組み合わせの部分式を評価する
  2. 最左部分式の値である手続き(演算子)を、残りの部分式の値である引数(被演算子)に作用させる

???日本語難しくて最初のがわからない。

(+ (* 3 3) (- 10 5))

# => 14

まず (+ x y) を評価しようとして x と y はそれぞれ別の式でまだ値が不定なので確定させるために (* 3 3) と (- 10 5) を評価して 9 と 5 を得る、そして (+ 9 5) に戻って評価すると 14 が得られる、ということ、だと思うんだけど。部分式ってのがそれぞれの式のことであってるんだろうか。

木構造のため込み tree accumulation

ああやっぱりその下の解説を読むと上の理解で間違ってない気がする。

「環境の役割が重要だ」とある。まだ何のことやらわからない。「+ は二つの引数をとってそれを加算した値を返す演算(をする命令をコンピュータにさせるようなプログラムを、この実行環境が割り当てていますよ)」とか、自分の言葉で言い直す。だからカッコで囲んだ「決め」の部分がなければ (+ 3 3) の + は一体何をするものかわからないのでこの式も評価不能、とかいうことか。

define は (define x 3) とかくが普通の式の評価ではない。 x の値と 3 に define を作用させて値を得る、というものじゃないから。 x に 3 を結びつけるから。

特殊形式 special forms

いまのところ define だけが本に出てきている。他にもある。



無理に一度にはやれないので今日はここまで。先を少し読んでおいて(すでに読んでる)、復習をかねてあとでブログに書きながら覚えることにしようかな。

2008-09-24

1.1.2 名前と環境

| 01:07 | 1.1.2 名前と環境 - a666666の日記 を含むブックマーク はてなブックマーク - 1.1.2 名前と環境 - a666666の日記 1.1.2 名前と環境 - a666666の日記 のブックマークコメント

値 value

変数 variable

define

値に名前をつける

gosh> (define size 2)
size
gosh> (* 5 size)
10
gosh> (define pi 3.14159)
pi
gosh> (define radius 10)
radius
gosh> (* pi (* radius radius))
314.159
gosh> (define circumference (* 2 pi radius))
circumference
gosh> circumference
62.8318

複雑なプログラムは比較的簡単な手続きを一歩一歩組み上げて出来ている

  • 環境 environment
    • 解釈系が名前と値の対応付けを見失わないために保持している記録

1.1.1 式

| 00:58 | 1.1.1 式 - a666666の日記 を含むブックマーク はてなブックマーク - 1.1.1 式 - a666666の日記 1.1.1 式 - a666666の日記 のブックマークコメント

gosh> 486
486
gosh> (+ 137 349)
486
gosh> (- 1000 334)
666
gosh> (* 5 99)
495
gosh> (/ 10 5)
2
gosh> (+ 2.7 10)
12.7

前置記法 prefix notation

gosh> (+ 21 35 12 7)
75
gosh> (* 25 4 12)
1200

入れ子 nested

清書系 pretty print

字下げ indent

gosh> (+ (* 3 5) (- 10 6))
19
gosh> (+ (* 3 (+ (* 2 4) (+ 3 5))) (+ (- 10 7) 6))
57
gosh> (+ (* 3
            (+ (* 2 4)
               (+ 3 5)))
         (+ (- 10 7)
            6))
57

読み込み - 評価 - 印字ループ read-eval-print loop

1.1 プログラムの要素

| 00:50 | 1.1 プログラムの要素 - a666666の日記 を含むブックマーク はてなブックマーク - 1.1 プログラムの要素 - a666666の日記 1.1 プログラムの要素 - a666666の日記 のブックマークコメント

基本式

言語が関わるもっとも単純なもの

組み合わせ法

単純なものから合成物を作る

抽象化

合成物に名前をつけて単一のものとして扱う


プログラムするときの二つの要素

  • 手続き
    • データの処理法の記述
  • データ
    • 処理したい「もの」のこと