【问题标题】:Not sure how to return a function [duplicate]不确定如何返回函数[重复]
【发布时间】:2013-09-20 03:01:50
【问题描述】:

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

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

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

【问题讨论】:

  • 假设f已经被定义为一个函数;你能写出以hx 作为参数并计算[f(x+h)-f(x)]/h 的函数吗?这似乎是家庭作业,你不会仅仅通过得到答案就能学到很多东西。
  • 那个重复的问题并不完全是同一个问题,但它确实包含对这个问题的答案。
  • 是的,我真的这么认为,我从来没有想过!谢谢

标签: function lambda scheme


【解决方案1】:

注意:这似乎是家庭作业,所以我不会直接回答,但是关于 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个参数的函数,你可以使用currying得到一个n-k个参数的函数并返回一个函数k 个参数。例如,如果您可以编写一个以fxh 作为参数的函数,并计算fx 处的导数与增量h 的近似值,例如:

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

然后你可以curry得到一个f的函数,它返回一个xh的函数:

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

【讨论】:

    猜你喜欢
    • 2021-09-26
    • 1970-01-01
    • 1970-01-01
    • 2022-11-26
    • 1970-01-01
    • 2020-05-27
    • 2018-05-24
    • 2016-08-10
    • 2022-08-16
    相关资源
    最近更新 更多