1

我对把括号放在计划中有点困惑。下面的例子:

=>(define foo1 (lambda (n) (+ n 1)))
=>(foo1 ((lambda () 5)))

=>value:6

给出结果 6。但我很惊讶为什么这没有给出错误。这是我认为它应该是计算机的方式:首先计算 (lambda () 5) 表达式并返回 5。现在我们删除它的括号:

=>(foo (5))

现在这应该是无效的,因为我们在调用函数时不使用括号作为参数。但它没有给出任何错误。有人可以告诉我我做错了什么吗?

谢谢

4

2 回答 2

3

好的!终于弄清楚这里发生了什么。

该语句实际上计算为 5:

((() 5))

在你的 REPL 中试试。

内部部分 (lambda () 5) 创建了一个过程。外部括号对 '(', ')' 调用该函数。显然,这使它返回 5!

于 2013-05-02T07:15:46.050 回答
1

Scheme 在代码和数据之间没有根本区别。我为什么要提这个?这是因为 Lambda 的返回总是要么是函数要么是错误,也就是说它返回的是代码而不是简单的数据。返回函数的任何其他函数都将以相同的方式运行。

于 2013-05-02T23:32:49.563 回答