問題1.4
以下の挙動の確認
(define (a-plus-abs-b a b)
((if (> b 0) + - ) a b ))
(a-plus-abs-b 5 -5)
10
(a-plus-abs-b -5 5)
0
問題1.5
現在使用している処理系が作用的順序の評価なのか、正規順序の評価なのかをテストする手続き。
(define (p) (p))
(define (test x y))
(if (= x 0)
0
y))
(test 0 (p))
わからん・・・・・。
SICP解答
あ、なるほど。
作用的の場合、演算子、非演算子を先に評価するので(p)が評価されるけれども、
(p)は再帰呼び出しになってるので無限ループして処理が終わらないと。
んで、正規順序。
「完全に展開し、簡約する」と覚えていたんですが、いざ展開しようとするとできませんでした。
自分的には「その値が必要になるまで、被演算子を評価しない」のほうが頭の中で使いやすいようです。
(test 0 (p))
が
(if (= x 0) 0 (p))
となって、ifが評価されて、(p)の出番がないまま答えがでる、と。
なるほど、なるほど。
0 件のコメント:
コメントを投稿