復讐の会-2-

さて、2回目です。
まだまだストック分^^;毎週できるかなぁ。
というか、復讐の会の件進んでないね--;

1.1.3 組み合わせの評価

この章の目的のひとつ、手続き的な考え方
解釈系自体も手続きに従っている
一般的処理での重要な点

  • 評価規則は再帰的(recursive)


P.5真ん中の式を書いて、DrSchemeでステップ実行して確認。たしかに4回。わかりやすい。

  • こーやって書くと木構造の最下層は分かるけど、なんとなくどこから評価開始なのか理解不足?
  • 再帰は階層的な木構造を扱うのに有利
 (* (+ 2 
       (* 4 6)
     )
    (+ 3 5 7)
 )


第2、3の規則
環境は評価が行われる文脈を提供するもの・・・
defineはspecial forms

1.1.4 合成手続き

手続き定義について学ぶ
2つの演算

  • 手続きを作る
  • 名前を付ける


合成手続きは基本手続きと同様に扱うことができる

(define (square x) (* x x))

(define (sum-of-squares x y) 
  (+ (square x)(square y)))

(define (f a)
  (sum-of-squares (+ a 1) (* a 2)))

ここまで書いてしまうともうなにがなんやら(w
関数の名前付けが重要。

1.1.5 手続き作用の置き換えモデル

解釈系の実際の動きではない
理工学のの現象をモデル化する場合、単純で不完全なモデルからはじめる


作用的順序と正規順序
ここまで習った解釈系の評価モデル

  1. 演算子と非演算子の評価
  2. 結果の手続きを結果の引数に作用させる


別の評価モデル…評価方法を選べるってたしか言ってたような。

  1. 値が必要になるまで、非演算子を評価しない
  2. 基本的演算子がでてくるまで置き換えを行う

この方式を正規順序の評価
一つ前のを作用的順序の評価


基本的にLispは作用的順序で評価されるけど、
正規順序もなにかで有効な道具として使われるらしい。

今回はここまで。
プログラムがどんな風に解釈してるかなんて、いままであんま考えたことなかったので、とっても新鮮な気持ち。