Clojure Koan 中的语法问题 - 匿名函数有额外的 ()

Cod*_*mer 1 clojure

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)

ffr*_*end 5

(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),将它们传递给其他函数并从它们返回(如我们fun1fun2)返回。(因此和的每一层)只是对函数的另一个调用(可能从其他函数返回)。