Haskell
1
Haskell
Haskell – czysto funkcyjny język programowania nazwany na cześć
Cechy
Jego specyficzne cechy to m.in.:
• monady,
• statyczny polimorfizm, Logo Haskella
• klasy typów, definiowalne operatory (również możliwość tworzenia nowych),
• strażnicy,
• wbudowana obsługa literate programming.
Rozszerzenia
Pliki Haskella mają rozszerzenie
• hs
• hsl gdy zawierają kod w stylu literate programming.
Kompilator
Haskell był początkowo intensywnie rozwijany wokół ośrodka University of Glasgow, popularny kompilator tego języka to Glasgow Haskell Compiler (GHC) kompilujący szybki kod maszynowy porównywalny w szybkości
wykonania do kodów z GCC (ok. 1,3 razy wolniejszy niż C).
Przykłady
-- Komentarz
silnia 1 = 1
silnia n = n*silnia(n-1)
silnia' n = product [1..n]
fib 0 = 0
fib 1 = 1
fib n = fib(n-1) + fib(n-2)
ack(0,y) = y+1
ack(x,0) = ack(x-1,1)
ack(x,y) = ack(x-1,ack(x,y-1))
-- przykład użycia strażników
sign x | x > 0 = 1
| x == 0 = 0
2
| x < 0 = -1
myproduct [] = 1
myproduct (n:m) = n * myproduct m
mysum [] = 0
mysum (n:m) = n + mysum m
data TreeOfMath =
Mult TreeOfMath TreeOfMath |
Div TreeOfMath TreeOfMath |
Add TreeOfMath TreeOfMath |
Sub TreeOfMath TreeOfMath |
Leaf Float
compute (Mult x y) = compute x * compute y compute (Div x y) = compute x / compute y compute (Add x y) = compute x + compute y compute (Sub x y) = compute x - compute y compute (Leaf x) = x
showme (Mult x y) = "(" ++ (showme x) ++ "*" ++ (showme y) ++ ")"
showme (Div x y) = "(" ++ (showme x) ++ "/" ++ (showme y) ++ ")"
showme (Add x y) = "(" ++ (showme x) ++ "+" ++ (showme y) ++ ")"
showme (Sub x y) = "(" ++ (showme x) ++ "-" ++ (showme y) ++ ")"
showme (Leaf x) = show x
qsort [] = []
qsort (x:xs) = qsort less ++ x:(qsort more) where less = [ a | a <- xs, a < x ]
more = [ a | a <- xs, a >= x ]
-- lista liczb pierwszych
primes = map head $ iterate (\(x:xs) -> [ y | y<-xs, y `mod` x /= 0 ]) [2..]
-- lista liczb Fibonacciego
listFib = 1:1:(zipWith (+) listFib (tail listFib))
-- wyrażenia TreeOfMath mają postać: (Sub (Mult (Leaf 5) (Leaf 4)) (Add (Leaf 3) (Leaf 2)))
3
Linki zewnętrzne
• Strona domowa Haskella [1]
• Wiki poświęcona Haskellowi [2]
Przypisy
[2] http://www.haskell.org/haskellwiki
4
Źródła i autorzy artykułu
Haskell Źródło: http://pl.wikipedia.org/w/index.php?oldid=28899849 Autorzy: Adam majewski, Akira, BartekChom, Beno, Catz, Cek, Chilton, Derbeth, Dodek, EMeczKa, Katafrakt, Kocio, Konradek, Krzysztof Sornat, Laforgue, Mciura, Proktor86, Pwl, Raiden, Skedra, Taw, Vindicator, Vmario, conversion script, pq61.warszawa.cvx.ppp.tpnet.pl, 10 anonimowych edycji Źródła, licencje i autorzy grafik
Plik:Haskell-Logo.svg Źródło: http://pl.wikipedia.org/w/index.php?title=Plik:Haskell-Logo.svg Licencja: Public Domain Autorzy: Thought up by Darrin Thompson and produced by Jeff Wheeler
Licencja
Creative Commons Attribution-Share Alike 3.0 Unported
//creativecommons.org/licenses/by-sa/3.0/