不理解scheme上的lambda表达式

不理解scheme上的lambda表达式,scheme,Scheme,我试着意识到这个过期是什么,却不明白 ( lambda (a b) (lambda (x y) (if b (+ x y a) (-x y a))) 我想,, a是数字,b是t或f, 在if语句中,我们询问b是否为真,如果为真,则返回第一个表达式(求和3个数字),否则返回第二个表达式(减去3个数字) 我需要在球拍上写些什么来运行这个? 我试着 及 (question 5 #f) 这门语言没有什么不好的地方。这不是一个完整的答案,因为我不想为你做家庭作业 首先,格式化和缩进代码将有助于使用任何

我试着意识到这个过期是什么,却不明白

( lambda (a b) (lambda (x y) (if b (+ x y a) (-x y a)))
我想,, a是数字,b是t或f, 在if语句中,我们询问b是否为真,如果为真,则返回第一个表达式(求和3个数字),否则返回第二个表达式(减去3个数字)

我需要在球拍上写些什么来运行这个? 我试着

(question 5 #f)

这门语言没有什么不好的地方。

这不是一个完整的答案,因为我不想为你做家庭作业

首先,格式化和缩进代码将有助于使用任何编程语言。几乎可以肯定,您可以访问一个编辑器来执行此操作。下面是我做的

那么,好的,像
(λ(…)…)
这样的形式表示什么?它是一个函数,它接受一些参数(第一个省略号),并返回其主体中最后一个形式(第二个省略号)的值,或者是纯函数语言中主体中唯一的形式

那么,什么是:

(λ (a b)
  (λ (x y)
    ...))
表示?它是一个由两个参数组成的函数,它返回一些东西:它返回的东西是什么?嗯,这是一个看起来像
(λ(…)…)
:你已经知道这些形式的意思了

最后,我们可以填写最后一个省略号(更正错误后:
(-x…
(-x…
)不同):

那么现在,你会如何称呼它,你会如何让它做一些有趣的事情(比如实际添加或减去一些东西)

是一个接受两个参数的函数(这就是
(lambda(ab)…
所说的)

您可以使用替换方法来发现它产生了什么。
将其应用于
5
#f

[将
a
替换为
5
,将
b
替换为
#f

(lambda (x y) (if #f (+ x y 5) (- x y 5)))
这是一个接受两个数字并生成一个新数字的函数。
(注意,
#f
5
通过应用外部lambda固定。)

如果我们将该函数命名为(来自DrRacket的交互),则使用该函数更容易:

并使用它:

> (answer 3 4)
-6
或者我们可以不命名地使用它:

> ((question 5 #f) 3 4)
-6
或者你可以在线完成,但这是一个可怕的无法阅读的混乱:

> (((lambda (a b) (lambda (x y) (if b (+ x y a) (- x y a)))) 5 #f) 3 4)
-6
(lambda (x y) (if #f (+ x y 5) (- x y 5)))
> (define question (lambda (a b) (lambda (x y) (if b (+ x y a) (- x y a)))))
> (question 5 #f)
#<procedure>
> (define answer (question 5 #f))
> (answer 3 4)
-6
> ((question 5 #f) 3 4)
-6
> (((lambda (a b) (lambda (x y) (if b (+ x y a) (- x y a)))) 5 #f) 3 4)
-6