Haskell
1
Haskell
Logo Haskella
Haskell – czysto funkcyjny język programowania nazwany na cześć
Cechy
Jego specyficzne cechy to m.in.:
• monady,
• 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
Haskell
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
)))
Źródła i autorzy artykułu
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/