如何确定方案中的括号

时间:2013-05-02 07:00:23

标签: functional-programming scheme

我对将parantheses放入计划感到有些困惑。以下示例:

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

=>value:6

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

=>(foo (5))

现在这应该是无效的,因为我们在调用函数时不使用参数的parantheses。但它没有错误。有人能告诉我我做错了吗?

由于

2 个答案:

答案 0 :(得分:3)

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

此语句实际上评估为5:

((lambda()5))

在你的REPL中试试。

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

答案 1 :(得分:1)

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