我对将parantheses放入计划感到有些困惑。以下示例:
=>(define foo1 (lambda (n) (+ n 1)))
=>(foo1 ((lambda () 5)))
=>value:6
给出结果6.但我很惊讶为什么这没有给出错误。这是我应该如何计算机:首先计算(lambda()5)表达式并返回5.现在我们删除它的parantheses:
=>(foo (5))
现在这应该是无效的,因为我们在调用函数时不使用参数的parantheses。但它没有错误。有人能告诉我我做错了吗?
由于
答案 0 :(得分:3)
好的!终于弄清楚这里发生了什么。
此语句实际上评估为5:
((lambda()5))
在你的REPL中试试。
内部部分(lambda()5)创建一个过程。外部paranthesis对'(',')'调用该函数。显然,这使它返回5!
答案 1 :(得分:1)
Scheme在代码和数据之间没有根本的区别。为什么我提这个?这是因为Lambda的返回始终是函数或错误,即它返回代码而不是简单数据。返回函数的任何其他函数将以相同的方式运行。