Pm_tut> :t negate
negate :: Num a => a -> a
####
Pm_tut> :t (-)
(-) :: Num a => a -> a -> a
####
nats = [0..]
####
Pm_tut> take 10 nats
[0,1,2,3,4,5,6,7,8,9]
####
open FH, '<', $file or die "Can't open $file for reading: $!\n";
####
const x y = x
####
(-) :: Num a => a -> a -> a
####
(-) :: Num a => (a, a) -> a
####
(-) :: Num a => a -> (a -> a)
####
(5-)
####
Pm_tut> putStr "Hello, world!\n"
Hello, world!
Pm_tut>
####
factorial n = if n == 0 then 1
else n * factorial (n-1)
####
Pm_tut> :t factorial
factorial :: Num a => a -> a
####
factorial 0 = 1
factorial n = n * factorial (n-1)
####
factorial n = n * factorial (n-1)
factorial 0 = 1
####
factorial 0 = 1
factorial (n+1) = (n+1) * factorial n
####
factorial n = tr n 1 where
tr 0 f = f
tr n f = tr (n-1) (n*f)
####
factorial n = product [1..n]
####
product = foldl (*) 1
####
foldl f z [] = z
foldl f z (x:xs) = foldl f (f z x) xs
####
product xs = foldl (*) 1 xs
####
sum xs = foldl (+) 0 xs -- this is in the Standard Prelude, too
####
or xs = foldl (||) False xs -- this is also in the Prelude
####
and xs = foldl (&&) True xs -- so is this
####
anyprime xs = or (map prime xs) -- map does what you'd expect
allprime xs = and (map prime xs)
####
foldl :: (a -> b -> a) -> a -> [b] -> a
####
andprime p n = p && prime n
allprime xs = foldl andprime True xs
####
allprime xs = foldl (\p n -> p && prime n) True xs
####
factorials = scanl (*) 1 [1..]
####
Pm_tut> take 10 factorials
[1,1,2,6,24,120,720,5040,40320,362880]
Pm_tut> factorials !! 24
620448401733239439360000
####
Pm_tut> factorials !! 65536
ERROR - Garbage collection fails to reclaim sufficient space
Pm_tut>