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.

Docs: https://clojuredocs.org/clojure.core/partial