is this partial function a closure?
clojure, closures
Solution
`partial` uses a closure to make the partial function. Check out the code of `partial` by using `(source partial)` in repl and you will see that it uses closures.
(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)))))
Problem
I am discussing closure with a friend and he thinks `(partial + 5)` is a closure. But I think a closure is a function closing over a free variable, for example ``` (let [a 10] (defn func1 [x] (+ x a)) ) ``` then `func1` is a closure. But in this case `5` is not a free variable. So which is the right answer?