2016-11-06 10 views
1

宿題のコードがエラーなしで動作します:(define(deriv-squared f)(proc(deriv f)))と(define deriv-squared(proc deriv))の違いは何ですか?

(define (deriv-squared f) 
(square-a-procedure (deriv f))) 

しかし、私は以下のように、それを定義するとき、それは評価しないと言う:でも私はそれを定義する「DERIVとして未定義」。 2つの定義の違いは何ですか?

(define deriv-squared (square-a-procedure deriv)) 

答えて

0

変数は、参照(使用)される前にバインディングを持つ必要があります。あなたは

(define deriv-squared (square-a-procedure deriv)) 

をお持ちの場合は

は、(square-a-procedure deriv)が評価され、結果の値 は名前deriv-squaredを与えています。 (square-a-procedure deriv)の評価中、derivの値が検索されます。したがって、の定義の前にderivの定義を配置する必要があります。

(私の推測では、ソース・ファイルにさらにダウンderivの定義を置いていることがある。)

さて、なぜあなたの最初の定義の仕事をしましたか?

(define deriv-squared 
    (lambda (f) 
     (square-a-procedure (deriv f)))) 
ここ

手続きに評価さ(lambda (f) (square-a-procedure (deriv f))))

(define (deriv-squared f) (square-a-procedure (deriv f))) 

これは、の略です。 derivは、プロシージャが使用されるまで参照されません。あなたがderiv-squaredを使う前にderivが定義されていれば、すべて正常に動作します。

関連する問題