【发布时间】:2017-10-12 21:17:53
【问题描述】:
我正在尝试通过 Clojure for the Brave and True (CFTBAT) 这本书来学习编程。在速成课程的最后,作者让我们编写了一个小程序来说明 Clojure 中的循环。为了解释程序的循环和递归部分here,作者使用loop 编写了一个较小的示例,然后说明可以用普通函数定义替换loop。
这是我看不懂的普通函数定义示例。代码如下:
(defn recursive-printer
([]
(recursive-printer 0))
([iteration]
(println iteration)
(if (> iteration 3)
(println "Bye!")
(recursive-printer (inc iteration)))))
(recursive-printer)
我看不懂代码,因为我看不到函数recursive-printer 的参数在哪里。在 Clojure 中,函数的参数应该在括号中,函数体在括号中。因此,在此示例中,参数将是空参数 [] 和 iteration。但是为什么还要放在括号之间呢?
而(recursive-printer 0)是什么?是函数调用吗,函数调用自己的地方?
如果有人能解释一下这段代码是如何工作的,那将不胜感激。
【问题讨论】:
-
有两个不同的参数列表。一个
[]- 带有用于处理不带参数调用它的情况的代码 - 另一个[iteration]用于处理带有一个参数的调用。 -
顺便说一句,因为这本书可以在线获得,所以有一个链接可能不会有什么坏处——网络版不是逐页定向的,所以“第 63 页”没有帮助使用它的人。
-
参见第 3 章“Arity 重载”:braveclojure.com/do-things
-
@CharlesDuffy 我编辑了问题以添加链接。谢谢,我错过了arity重载!因此,如果在没有参数的情况下调用问题,则该函数会使用参数 (0) 调用自身并包含此参数,
iteration直到它达到 4? -
完全正确。