What is "point free" style (in Functional Programming)?
Point-free style means that the arguments of the function being defined are not explicitly mentioned, that the function is defined through function composition.
If you have two functions, like
square :: a -> a
square x = x*x
inc :: a -> a
inc x = x+1
and if you want to combine these two functions to one that calculates x*x+1
, you can define it "point-full" like this:
f :: a -> a
f x = inc (square x)
The point-free alternative would be not to talk about the argument x
:
f :: a -> a
f = inc . square
Just look at the Wikipedia article to get your definition:
Tacit programming (point-free programming) is a programming paradigm in which a function definition does not include information regarding its arguments, using combinators and function composition [...] instead of variables.
Haskell example:
Conventional (you specify the arguments explicitly):
sum (x:xs) = x + (sum xs)
sum [] = 0
Point-free (sum
doesn't have any explicit arguments - it's just a fold with +
starting with 0):
sum = foldr (+) 0
Or even simpler: Instead of g(x) = f(x)
, you could just write g = f
.
So yes: It's closely related to currying (or operations like function composition).