我不明白以下程序代码。任何人都可以向我解释一下吗?
(define myFunction
(lambda (f x y z)
(f x y z)))
如何简化它?
答案 0 :(得分:4)
除了让它看起来有点语法之外,你不能简化它,因为
(define (myFunction f x y z)
(f x y z))
这是用于定义完全相同的事物的语法快捷方式。
这样,您可以在心理上将其视为重写规则:每当您看到
时 (myFunction f x y z)
在您的代码中 - 那些f
,x
,y
和z
占位符所指的内容 - 您可以将其替换为< / p>
(f x y z)
同时替换占位符的实际值a.k.a.参数,a.k.a。函数参数。
因此,您会看到新代码有意义,f
应该是一个能够接受三个参数的函数,x
,y
和z
。
例如,如果您定义(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
。