Lets you compose several functions f₀ f₁ … fₙ
. It returns a function that will successively apply fₙ
to its arguments, then fₙ₋₁
to the result of fₙ
and so on. Function are applied from right to left, like for mathematical function composition: (f ∘ g ∘ h)(x) = f(g(h(x)))
.
> ((compose sqrt +) 16 9)
5
> ((compose - sqrt) 16)
-4
The arity of each function should include the the number of returned values of the function immediately to its right. The rightmost function determines the arity of the whole composition. The compose1 function imposes that the functions return 1 value and expect 1 argument. However, compose1 does not restrict the input arity of the last function, nor the output arity of the first function.
[n input]--> first-function -->[1 output]--> ... last function -->[m output].
((compose + values) 1 2 3 4)
10
> ((compose1 + values) 1 2 3 4)
XX result arity mismatch;
expected number of values not received
expected: 1
received: 4
values...: