如何在这个问题中返回一个函数?我假设它使用 (lambda x) 但我不太确定如何使用。
在 SCHEME 中编写一个函数(也许称其为 der 表示导数),它接受函数 f 和 h 的值作为形式参数,并返回由规则 g(x) = (f (x + h) - f ( x))/小时
(如上所述,对于较小的 h,g 是 f 的导数的一个很好的近似值。重要说明:您的函数应该接受一个函数和一个数字 h 作为参数,并返回一个函数。)
注意:这似乎是家庭作业,所以我不会直接回答,但是关于 Scheme 定义语法和柯里化的一些注释似乎是合适的。
当你在 Scheme 中编写类似
(define (add-one x)
(+ x 1))
你定义add-one
为一个函数。你可以等效地做
(define add-one
(lambda (x)
(+ x 1)))
因为
(lambda (x)
(+ x 1))
是一个函数。你可以写一个make-adder
函数
(define (make-adder addend)
(lambda (x)
(+ addend x)))
这相当于
(define make-adder
(lambda (addend)
(lambda (x)
(+ addend x))))
调用(make-adder 10)
返回一个函数,该函数接受一个参数并将其加 10。例如,
((make-adder 10) 2)
;=> 12
一般来说,如果你可以写一个有n 个参数的函数,你可以使用柯里化来得到一个有n -k 个参数的函数,并返回一个有 k 个参数的函数。例如,如果您可以编写一个函数,该函数将f
,x
和h
作为参数并计算f
atx
与 delta的导数的近似值h
,例如:
(lambda (f x h)
;; [f(x+h)-f(x)]/h
)
然后你可以curry得到一个f
返回x
and的函数的函数h
:
(lambda (f)
(lambda (x h)
;; [f(x+h)-f(x)]/h
))