12 Oct
Arithmetic
Basic:
> 3 + 4
7
> 1 - 3.5
-2.5
> 4 * (-2) -- negative literals must be surrounded by parantheses
-8
Division:
> 7 / 2
3.5
> 7 `div` 2 -- equivalent to / on ints in C
3
> 7 `mod` 2 -- equivalent to % on ints in C
1 -- reminder after division
Exponentiation:
> 2 ** 4
16
> 2 ^ 4
16
Function signatures
Optional, helps in debugging.
double :: Int -> Int -- takes an integer and returns an integer
double x = x + x
square x = x^2 -- x^2 is equivalent to x*x
Multiple arguments:
customAdd :: Int -> Int -> Int -- takes two integers and returns one
customAdd x y = x + y + 10
After declaring a signature func :: Type -> Type
, you must also write the body of the function, or at least func = undefined
.
Calling functions
Parentheses are optional (when they cause no ambiguity):
> double(10)
20
> double 10
20
Functions of arity (number of arguments) 2 can be used as an infix operator:
> div 100 2
50
> 100 `div` 2 -- function name surrounded by backticks
50
Conditionals
The following are equivalent:
-- variant 1: if
fact n = if n == 0 then 1
else n * fact(n-1)
-- variant 2: equations
fact 0 = 1
fact n = n * fact(n-1)
-- variant 3: cases
fact n
| n == 0 = 1
| otherwise = n * fact(n-1) -- otherwise is alias for True
Implied:
isDivisible x = x `mod` 3 == 0 -- implied form of:
isDivisible x = if x `mod` 3 == 0 then True else False