1.1.3
keyword
組合せ評価規則、例外構文、評価プロセスは再帰
組合せ評価規則
組合わせの式を評価するときは
以下の評価規則に従う。
1、組合せの部分式を評価する
2、再左部分式の値である手続きを残りの部分式の値である引数(被演算子)に作用させる
1は
(* (+ 1 2) (+ 2 2))
のような式でも1つずつ括弧の中を計算していくんだよってことで、
2は,(+ 1 2)の+は1,2の両方に作用するんだよってこと。
例外構文
この評価規則では定義が扱えず、defineは組合せ式ではなく例外構文。なぜなら
(define x 3)
のdefineはxに3を対応づけているだけで、defineはxと3の両方に作用しているわけではない。
この例外を構文シュガーと言う。
評価プロセスは再帰
(* (+ 1 2) (+ 2 2))
を見ると、頭の中では(+ 1 2)と(+ 2 2)を先に計算するが、評価規則2よりLispでは、まず先に手続きが行われるのは最左部分式の*。
この*手続きを実現するために、(+ 1 2)(+ 2 2)が呼び出されるので、「評価の規則は本質的に再帰」となります。
1.1.4
keyword
抽象化法、手続き定義
(define x 3)のように値を対応づけるだけではなくて、
(define (square x) (* x x))のような演算に名前を付ける。
このような抽象化法の一手法を手続き定義という。
これは
(square 10)
100
(square (+ 2 5))
49
とマクロのように使用できる。
むーん、わからない点が1つ。
(square x)のxが仮引数として、(* x x)に渡して計算してるのは
どういう規則が元になってるんですか。
(define (<name> <仮引数>) (<本体>))
って例外構文があるって考えていいのかな
0 件のコメント:
コメントを投稿