Haskell - Google

Haskell

Z Wikipedii

Skocz do: nawigacji, szukaj
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ą, Haskell nadrabia to wyjątkowo czytelną składnią. W szczególności widać na tym polu kontrast wobec języków takich jak 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 ]

-- 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)))

[edytuj] Linki zewnętrzne

Wikibooks
Zobacz podręcznik na Wikibooks:
Haskell

Polska przedstawi założenia polityki wschodniej
Minister Spraw Zagranicznych Radosław Sikorski zapowiedział w TVN 24, że w najbliższych tygodniach należy się spodziewać "skonsultowanej z sojusznikami i partnerami" uszczegółowionej propozycji Polski w sprawie polityki wschodniej UE.
"Wprost": Rutkowski mógł pomagać porywaczom Olewnika
– Detektyw Krzysztof Rutkowski mógÅ‚ współpracować z porywaczami mojego syna – podejrzewa WÅ‚odzimierz Olewnik, ojciec porwanego i zamordowanego Krzysztofa. Oskarżenia pod adresem Rutkowskiego – także o wyÅ‚udzenie od nich znacznej sumy pieniÄ™dzy – rodzina Olewników ujawniÅ‚a już w kwietniu. "Wprost" dotarÅ‚ do informacji wskazujÄ…cych, że także w wypadku innych gÅ‚oÅ›nych porwaÅ„ Krzysztof Rutkowski mógÅ‚ pomagać gangsterom.
PSL chce więcej stanowisk
Piechociński za Grabarczyka i więcej foteli wiceministrów - to, jak dowiedział się "Newsweek", pomysł PSL na letnią rekonstrukcję gabinetu Donalda Tuska.
Kazimierz Sas przewodniczącym małopolskiego SLD
Nowym szefem SLD w Małopolsce został Kazimierz Sas, członek Zarządu Krajowego i szef nowosądeckiej SLD.
Kielce: Sławomir Kopyciński ponownie liderem SLD
Poseł Sławomir Kopyciński został ponownie wybrany na przewodniczącego świętokrzyskiej rady wojewódzkiej Sojuszu Lewicy Demokratycznej. Wyboru dokonali w sobotę delegaci na zjeździe w Kielcach.
Linki: Strona g³ówna