Programowanie

Haskell

Haskell

Ten artykuł dotyczy języka programowania. Zobacz też: inne znaczenia tego słowa.

Haskell to funkcyjny język programowania nazwany na cześć Haskella Curry. Jego specyficzne cechy to leniwe wartościowanie, monady, statyczny polimorfizm.

Pliki Haskella mają rozszerzenie .hs

Choć semantyka leniwej ewaluacji może być w wielu zastosowaniach bardzo niewygodna, podobnie jak brak biblioteki porównywalnej z ocamlowską, Haskella pod względem czytelności składni nie przewyższa chyba żaden język programowania, jaki do tej pory stworzono.[potrzebne źródło] W szczególności widać na tym polu kontrast wobec języków takich jak Lisp i Ocaml.

Kilka przykładów:

-- Komentarz

silnia(1) = 1
silnia(n) = n*silnia(n-1)

silnia2 n = product [1..n]

fib(0) = 0
fib(1) = 1
fib(n+2) = fib(n+1) + fib(n)

ack(0,y) = y+1
ack(x,0) = ack(x-1,1)
ack(x,y) = ack(x-1,ack(x,y-1))

sign x | x>0.0  =  1
sign x | x==0.0 =  0
sign x | x<0.0  = -1

myproduct []    = 1
myproduct [n]   = n
myproduct (n:m) = n * myproduct (m)

mysum ([])   = 0
mysum (n:[]) = n
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 ]

-- wyrażenia TreeOfMath mają postać: (Sub (Mult (Leaf 5) (Leaf 4)) (Add (Leaf 3) (Leaf 2)))

[edytuj] Linki zewnętrzne

Wikibooks
Zobacz podręcznik na Wikibooks:
Haskell