【问题标题】:Clojure: multiple uses of the same symbol defining and calling a recursive functionClojure:同一个符号的多次使用定义和调用递归函数
【发布时间】:2014-11-29 07:37:29
【问题描述】:

我有一个递归函数(来自 github):

(defn delete-recursively [fname]
  (let [func (fn [func f]
               (when (.isDirectory f)
                 (doseq [f2 (.listFiles f)]
                   (func func f2)))
               (clojure.java.io/delete-file f))]
    (func func (clojure.java.io/file fname))))

我无法弄清楚这个func 的事情。我需要帮助:)

为什么可以用同一个符号func表示

  • 函数绑定的名称,
  • fn 形式的参数名称,
  • 被调用的函数和
  • 调用的第一个参数?

还是发生了其他事情?

【问题讨论】:

  • 当我看到这段代码时,我对符号func 的双重出现有类似的疑问,最终意识到它只是将线程func 作为促进递归的参数。也许一个有效的问题是这样的:“有没有更清晰、更容易理解的方式来编写这段代码?”

标签: recursion clojure


【解决方案1】:

我的手机写的,所以我很抱歉。

这个函数似乎被不必要地混淆了。

“func”是一个函数,如果给定一个文件,则删除普通文件,如果给定一个目录,则将作为参数传递的函数“f”应用于目录中的所有文件。

现在“func”作为“f”参数赋予“func”,因此它以递归方式完成其工作。

简单:3

【讨论】:

    猜你喜欢
    • 2014-12-14
    • 2023-04-03
    • 1970-01-01
    • 2018-04-10
    • 2010-09-28
    • 2021-11-29
    • 1970-01-01
    • 2012-08-29
    • 2015-08-14
    相关资源
    最近更新 更多