不知道如何返回一个函数

时间:2013-09-20 03:01:50

标签: function lambda scheme

如何在此问题中返回功能?我假设它使用(lambda x),但我不太确定如何。

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

(如上所述,对于小h,g是f的导数的良好近似。重要说明: 你的函数应该使用函数和数字h作为参数,并返回一个函数。)

1 个答案:

答案 0 :(得分:2)

注意:这似乎是作业,所以我不会直接回答,但有关Scheme定义语法和currying的一些注释似乎是合适的。

在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 参数编写函数,则可以使用currying来获取 n -k参数的函数并返回k参数的函数。例如,如果您可以编写一个以fxh为参数的函数,并计算f的导数x的近似值。 delta h,例如:

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

然后你可以通过咖喱来获得f的函数,该函数返回xh的函数:

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