-2

如何在这个问题中返回一个函数?我假设它使用 (lambda x) 但我不太确定如何使用。

在 SCHEME 中编写一个函数(也许称其为 der 表示导数),它接受函数 f 和 h 的值作为形式参数,并返回由规则 g(x) = (f (x + h) - f ( x))/小时

(如上所述,对于较小的 h,g 是 f 的导数的一个很好的近似值。重要说明:您的函数应该接受一个函数和一个数字 h 作为参数,并返回一个函数。)

4

1 回答 1

2

注意:这似乎是家庭作业,所以我不会直接回答,但是关于 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,xh作为参数并计算fatx与 delta的导数的近似值h,例如:

(lambda (f x h)
  ;; [f(x+h)-f(x)]/h
  )

然后你可以curry得到一个f返回xand的函数的函数h

(lambda (f)
  (lambda (x h)
    ;; [f(x+h)-f(x)]/h
    ))
于 2013-09-20T03:12:47.417 回答