Function Scheme(DrRacket)lambda表达式

Function Scheme(DrRacket)lambda表达式,function,lambda,functional-programming,scheme,racket,Function,Lambda,Functional Programming,Scheme,Racket,我不理解以下程序代码。谁能给我解释一下吗 (define myFunction (lambda (f x y z) (f x y z))) 如何简化它?lambda。。。创建一个需要4个参数的函数,其中f本身应该是一个函数。f x y z将此f应用于其他3个参数 define将名称myFunction赋予lambda。lambda。。。创建一个需要4个参数的函数,其中f本身应该是一个函数。f x y z将此f应用于其他3个参数 define为lambda命名为myFunction。

我不理解以下程序代码。谁能给我解释一下吗

(define myFunction
  (lambda (f x y z)
    (f x y z)))
如何简化它?

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

define将名称myFunction赋予lambda。

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


define为lambda命名为myFunction。

除了使其看起来有点语法化之外,您无法对其进行太多简化,如下所示

(define (myFunction f x y z)
        (f x y z))
这是定义完全相同事物的语法快捷方式

这样,你就可以把它当作一个重写规则:无论何时你看到它

        (myFunction f x y z)
在您的代码中,无论f、x、y和z占位符指的是什么,您都可以将其替换为

        (f x y z)
将实际值(也称为参数)替换为占位符(也称为函数参数)

因此,您可以看到,为了使新代码有意义,f应该是一个能够接受三个参数x、y和z的函数

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

(myFunction f 1 2 3)
然后返回一个结果——这是调用刚才定义的函数f的结果,值为1、2和3

myFunction中的f将引用全局名称f,它引用一个值—您定义的名为f的函数。lambda表单定义了一个值——一个匿名函数——并将一个名称f绑定到该值上,因此从现在起,该名称的任何使用都会引用该值。在Scheme中,函数和其他任何函数一样都是值


全局函数f被定义为在接收到三个参数时将+应用于它接收到的三个参数。它实际上是在说,给我一些三个值,我将为你总结它们,调用myFunction f 1 2 3为它提供了你选择的三个值。

除了使它看起来有点语法化之外,你不能将它简化太多

(define (myFunction f x y z)
        (f x y z))
这是定义完全相同事物的语法快捷方式

这样,你就可以把它当作一个重写规则:无论何时你看到它

        (myFunction f x y z)
在您的代码中,无论f、x、y和z占位符指的是什么,您都可以将其替换为

        (f x y z)
将实际值(也称为参数)替换为占位符(也称为函数参数)

因此,您可以看到,为了使新代码有意义,f应该是一个能够接受三个参数x、y和z的函数

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

(myFunction f 1 2 3)
然后返回一个结果——这是调用刚才定义的函数f的结果,值为1、2和3

myFunction中的f将引用全局名称f,它引用一个值—您定义的名为f的函数。lambda表单定义了一个值——一个匿名函数——并将一个名称f绑定到该值上,因此从现在起,该名称的任何使用都会引用该值。在Scheme中,函数和其他任何函数一样都是值


全局函数f被定义为在接收到三个参数时将+应用于它接收到的三个参数。它实际上是在说,给我一些三个值,我将为您求和,调用My函数f 1 2 3提供您选择的三个值。

谢谢您的回答。但是如果你的意思是这样定义fxyz+xyz,那么lambda表达式中的第二个f仍然不起作用。它显示了以下错误消息函数调用:应为开括号后的函数,但找到了一个变量感谢您的回答。但是如果你的意思是这样定义fxyz+xyz,那么lambda表达式中的第二个f仍然不起作用。它显示了以下错误消息函数调用:应为开括号后的函数,但找到了变量