2008/12/28

【Scheme】問題1.5@SICP

いまいちよくわからない。

正規順序の場合、先にパラメータが展開されようとして無限に再帰し続けることになるってことでFA?

作用順序の場合は、testが展開されてifのところでxが評価されて0だとわかればyは評価されないので0が帰って正常に処理が終了する・・・・ってことでOK?

SICPのP.9に「解釈系が実際に使っている『引数を評価し、作用させる』方法を作用的順序の評価・・・」ってとこみると、作用的順序が採用されてるのかなーと思っていたら、実際に下記のコード実行したら無限ループなんですけど・・・。

ということは正規順序?よくわからない。ヘルプ・・・・。もうちょっとよく読んでみる;;

(define p
  (lambda () (p)))

(define test
  (lambda (x y)
    (if (zero? x) 0 y))

(test 0 (p))

追記:なんか勘違いしてたみたいだ。こういうことか。

正規順序

;;normal order
(test 0 (p))

((if (zero? 0)
   0
  (p)));;=> 0

作用順序

;;applicative order
(test 0 (p)) (test 0 (labda () (lambda () ((lambda () (lambda () (lambda ....
ということで、実際に採用されてるのが「作用順序」。「演算子より先に非演算子が評価される」ってことでFA。

0 件のコメント:

コメントを投稿