这部分功能是封闭吗?

xie*_*fei 6 closures clojure

我正和朋友讨论关闭,他认为(partial + 5)是关闭.但我认为闭包是一个关闭自由变量的函数

(let [a 10]
  (defn func1 [x] (+ x a))
)
Run Code Online (Sandbox Code Playgroud)

然后func1是一个关闭.但在这种情况下5不是自由变量.那么哪个是正确的答案?

Ank*_*kur 8

partial使用闭包来制作部分功能.partial通过(source partial)在repl中使用来查看代码,您将看到它使用闭包.

(defn partial
  "Takes a function f and fewer than the normal arguments to f, and
  returns a fn that takes a variable number of additional args. When
  called, the returned function calls f with args + additional args."
  {:added "1.0"}
  ([f arg1]
   (fn [& args] (apply f arg1 args)))
  ([f arg1 arg2]
   (fn [& args] (apply f arg1 arg2 args)))
  ([f arg1 arg2 arg3]
   (fn [& args] (apply f arg1 arg2 arg3 args)))
  ([f arg1 arg2 arg3 & more]
   (fn [& args] (apply f arg1 arg2 arg3 (concat more args)))))
Run Code Online (Sandbox Code Playgroud)