06_function.clj包含这个问题,我不明白为什么在位置1和2处有一对额外的(),因为位置3已经包含了括号。
"One function can beget another"
(= 9 (
( <---- 1
(fn [] (fn [a b] (+ a b))) <----3
) <-----2
4 5))
Run Code Online (Sandbox Code Playgroud)
(fn [a b] (+ a b))
Run Code Online (Sandbox Code Playgroud)
是一个接受 2 个参数并返回它们的总和的函数,让我们用名称替换 iffun1
(fn [] fun1)
Run Code Online (Sandbox Code Playgroud)
是一个不接受任何内容并返回函数对象的函数fun1。我们称这个新函数为fun2
(
fun2
)
Run Code Online (Sandbox Code Playgroud)
这里我们调用fun2,正如我们之前讨论的,它返回函数fun1
(
fun1
4 5)
Run Code Online (Sandbox Code Playgroud)
这里我们用 2 个参数 -和来调用fun1(从 ) 返回。这给了我们(fun2)459
(= 9
9)
Run Code Online (Sandbox Code Playgroud)
最后我们检查两个数字是否相等。他们实际上是平等的。
这里您应该了解的主要一点是 Clojure 中的函数也是一等公民。您可以生成它们(如fun1),将它们传递给其他函数并从它们返回(如我们fun1从fun2)返回。(因此和的每一层)只是对函数的另一个调用(可能从其他函数返回)。