Scheme(DrRacket)lambda表达式

时间:2017-12-04 08:16:37

标签: function lambda functional-programming scheme racket

我不明白以下程序代码。任何人都可以向我解释一下吗?

(define myFunction
  (lambda (f x y z)
    (f x y z)))

如何简化它?

2 个答案:

答案 0 :(得分:4)

除了让它看起来有点语法之外,你不能简化它,因为

(define (myFunction f x y z)
        (f x y z))

这是用于定义完全相同的事物的语法快捷方式。

这样,您可以在心理上将其视为重写规则:每当您看到

        (myFunction f x y z)
在您的代码中

- 那些fxyz占位符所指的内容 - 您可以将其替换为< / p>

        (f x y z)

同时替换占位符的实际值a.k.a.参数,a.k.a。函数参数。

因此,您会看到新代码有意义,f应该是一个能够接受三个参数的函数,xyz

例如,如果您定义(define (f x y z) (+ x y z)),则可以调用

(myFunction f 1 2 3)

并返回结果 - 这是调用上面定义的函数f的结果,其值为 1 2 3

f内的{p> myFunction将引用全局名称f,该名称引用一个值 - 您定义的名为f的函数。 lambda表单定义了一个值 - 一个匿名函数 - 并且define 将一个名称f绑定到它,因此任何对该名称的使用都会引用该值, 从现在开始。在Scheme中, functions 是与其他任何值相同的值。

全局函数f被定义为将+应用于它接收的三个参数,接收它们时。它实际上是在说,&#34;给我一些三个价值观,我会为你总结它们,并且电话(myFunction f 1 2 3)为它提供你选择的三个值。

答案 1 :(得分:0)

lambda ...创建一个需要4个参数的函数,第一个参数(f)本身应该是一个函数。 (f x y z)将此f应用于其他3个参数。

define为lambda命名myFunction