从函数返回函数的目的是什么?
What is the purpose of returning function from function?
我正在研究 SICP,我并没有完全理解函数背后的想法 return。
(define (deriv g)
(lambda (x)
(/ (- (g (+ x dx)) (g x))
dx)))
上面的代码将被用作((deriv square) 10),为什么我们不能把这段代码简单一点呢?通过1步评估结果?
(define (deriv g x)
(/ (- (g (+ x dx)) (g x))
dx))
为什么我们真的需要函数作为 returned 值?
抽象?部分申请?我想有一个更简单、更清晰的想法,我们需要它做什么,以及在哪里使用它。谢谢!
嗯,在这种情况下,因为在数学上函数的导数是函数。因此,如果您想要一个计算函数导数的函数,那么它将 return 一个函数。
这很有用。想象一下,如果您有一个名为 fplot
的函数,它将在两个值之间绘制一个函数。然后我可以用
绘制函数 sin
(fplot sin (- pi) pi)
说。现在,如果我想绘制 sin
的导数(假设我不知道它是 cos
),我可以绘制:
(fplot (deriv sin) (- pi) pi)
fplot
根本不需要知道它绘制的函数的来源。另一种方法是编写一个特殊的函数来绘制函数的导数,然后可能是另一个函数来绘制二阶导数等等,最后是一些函数,它接受一个函数和一个整数并绘制出导数的顺序它或其他东西。
然后你会意识到,嗯,设计一个函数来绘制函数和另一个函数来计算作为函数的导数的函数不是更好的设计吗?那么这些东西就可以很好地组合在一起了。
考虑 (let ((dsq (deriv square))) (map dsq (range 0 100 0.1)))
与 (map (lambda (x) (deriv square x)) (range 0 100 0.1))
。
第一个代码段中的部分应用会预先计算一些东西,第二个代码必须在每个 x
处重做,一次又一次,这很浪费。
我正在研究 SICP,我并没有完全理解函数背后的想法 return。
(define (deriv g)
(lambda (x)
(/ (- (g (+ x dx)) (g x))
dx)))
上面的代码将被用作((deriv square) 10),为什么我们不能把这段代码简单一点呢?通过1步评估结果?
(define (deriv g x)
(/ (- (g (+ x dx)) (g x))
dx))
为什么我们真的需要函数作为 returned 值? 抽象?部分申请?我想有一个更简单、更清晰的想法,我们需要它做什么,以及在哪里使用它。谢谢!
嗯,在这种情况下,因为在数学上函数的导数是函数。因此,如果您想要一个计算函数导数的函数,那么它将 return 一个函数。
这很有用。想象一下,如果您有一个名为 fplot
的函数,它将在两个值之间绘制一个函数。然后我可以用
sin
(fplot sin (- pi) pi)
说。现在,如果我想绘制 sin
的导数(假设我不知道它是 cos
),我可以绘制:
(fplot (deriv sin) (- pi) pi)
fplot
根本不需要知道它绘制的函数的来源。另一种方法是编写一个特殊的函数来绘制函数的导数,然后可能是另一个函数来绘制二阶导数等等,最后是一些函数,它接受一个函数和一个整数并绘制出导数的顺序它或其他东西。
然后你会意识到,嗯,设计一个函数来绘制函数和另一个函数来计算作为函数的导数的函数不是更好的设计吗?那么这些东西就可以很好地组合在一起了。
考虑 (let ((dsq (deriv square))) (map dsq (range 0 100 0.1)))
与 (map (lambda (x) (deriv square x)) (range 0 100 0.1))
。
第一个代码段中的部分应用会预先计算一些东西,第二个代码必须在每个 x
处重做,一次又一次,这很浪费。