Clojure - partial
Currying, partially applying arguments to functions, in Clojure.
The function partial
accepts a function and some, but not all, of the arguments for that function. It returns a new function which accepts the remaining arguments. This is known as currying.
Using the function <
, which accepts two arguments, as an example we can use partial
to apply to the first argument and return a new function which accepts the second.
The function <
accepts two arguments:
(< 25 10) ; false
We can create a new function with just 25
applied:
(partial < 25) ; fn
If we define a var and store the function returned by partial
we can use it as follows:
(def greater-than-25 (partial < 25))
(greater-than-25 10) ; false
(greater-than-25 100) ; true
Since partial
returns a function it can be used with high-order functions such as map
.
(map (partial * 10) [10 20 30 40]) ; 100 200 300 400
The function map
accepts a function (which accepts one argument) and a collection, the function is applied to each item in the collection.