2016-11-06 6 views
1

Код в моей домашней работе работает без ошибок:В чем разница между (define (производный квадрат f) (proc (производный f))) и (определить производный квадрат (proc производный))?

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

Но когда я определяю его, как показано ниже, он не оценивает и говорит: «DERIV как неопределенные» я даже определить его. В чем разница между двумя определениями?

(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-squared.

(Я предполагаю, что вы поместили определение deriv дальше вниз в исходном файле.)

Теперь почему свою первую работу определение?

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

Это сокращение для:

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

Здесь (lambda (f) (square-a-procedure (deriv f)))) оцениваемого к процедуре. Но deriv не упоминается до тех пор, пока не будет использована процедура. Поэтому, если deriv определен до использования deriv-squared, все работает отлично.

 Смежные вопросы

  • Нет связанных вопросов^_^