If we want to map a function that increases every element of a range by 1, we could write
map (\\x -> x + 1) [1..5]
but I guess most peo
I don't like subtract
because it's confusingly backwards. I'd suggest
minus :: Num n => n -> n -> n
minus = (-)
infixl 6 `minus`
Then you can write
map (`minus` 1) [1..5]
I think map (\x -> x - 1) [1..5]
transmits the programmer's intention better, since there's no doubt about what is being subtracted from what. I also find your first solution, map (+(-1)) [1..5]
, easy to read too.
You can use the subtract
function instead of -
if you want to right-section subtraction:
map (subtract 1) [1..5]
Since -
is both the infix subtract and the prefix negate, you can't use the (*x)
(where * is an infix operator and x a value) syntax for -
. Luckily Prelude comes with negate
and subtract
, which is \x -> -x
and \x y -> y-x
respectively, so that you may use those where you need to differentiate between the two.