--kao car u scheme --head [1,2,3,4,5] --cdr u scheme = tail u haskellu --tail [1,2,3,4] -- prvo naziv funkcije -- pa spisak argumenata -- posle znaka '=' sledi telo funkcije double x = x+x -- skracena notacija za generisanje odrejdnih listi -- slicna skupovnoj notaciji u matematici l1 = [1..10] -- alternativne implementacije f-je last last1 xs = head (reverse xs) last2 xs = xs !! (length xs - 1) --ugradjeni osnovni tipovi podataka -- Bool : True, False -- Char : 'a','b' -- String : "Abcd" -- Int, Integer: 23 -- Float: 23.4 -- [False,True] :: [Bool] -- [[False],[True,False],[]] :: [[Bool]] -- length "Neki String" - interno se predstavlja kao kolekcija karaktera --strukture podataka --type ('a',False,"String",1.3) --('a',False,"String",1.3) :: Fractional a => (Char,Bool,[Char],a) --radi samo za cele brojeve i to samo kada su argumenti dati kao uredjeni par add :: (Int, Int)->Int add (x,y) = x+y add' :: Int -> (Int->Int) add' x y = x+y -- poziv add' 4 5 se intepretira kao -- (add' 4) 5 --Polimorfizam funkcija --type length --length :: [a] -> Int --Main> length [1,2,3] --3 --Main> length [[1,2],[4,5,6]] --2 --Main> length [(False,1),(True,4)] --2 --Main> length [(False,1),[1,3]] -- greska, jer podaci unutar liste moraju biti istog roda, istog tipa -- primer lambda izraza double1 = \x -> x+x odds n = map (\x -> x*2 + 1) [0..n-1]