Haskell
Przeczytaj także...
W programowaniu funkcyjnym, monada jest rodzajem konstruktora abstrakcyjnego typu danych, używanego do wyrażania zmieniających się stanów obliczeń (operacji) zamiast znanych z modelu dziedzinowego zmieniających się stanów danych.Rozszerzenie – sposób oznaczania typu pliku za pomocą sufiksu jego nazwy. Rozszerzenie jest oddzielone od reszty nazwy za pomocą kropki. Ponieważ w nowoczesnych systemach nazwa pliku może sama w sobie zawierać kropki, przyjmuje się, że rozszerzeniem jest część nazwy po ostatniej kropce, a samo rozszerzenie nie zawiera kropek.
Uniwersytet w Glasgow (ang. University of Glasgow, gael. Oilthigh Ghlaschu) – jeden z czołowych uniwersytetów brytyjskich, założony w 1451, jako historycznie drugi uniwersytet w Szkocji.
W programowaniu funkcyjnym, monada jest rodzajem konstruktora abstrakcyjnego typu danych, używanego do wyrażania zmieniających się stanów obliczeń (operacji) zamiast znanych z modelu dziedzinowego zmieniających się stanów danych.Rozszerzenie – sposób oznaczania typu pliku za pomocą sufiksu jego nazwy. Rozszerzenie jest oddzielone od reszty nazwy za pomocą kropki. Ponieważ w nowoczesnych systemach nazwa pliku może sama w sobie zawierać kropki, przyjmuje się, że rozszerzeniem jest część nazwy po ostatniej kropce, a samo rozszerzenie nie zawiera kropek.
Uniwersytet w Glasgow (ang. University of Glasgow, gael. Oilthigh Ghlaschu) – jeden z czołowych uniwersytetów brytyjskich, założony w 1451, jako historycznie drugi uniwersytet w Szkocji.
Haskell – czysto funkcyjny język programowania nazwany na cześć Haskella Curry'ego.
Cechy[ | edytuj kod]
Jego specyficzne cechy to m.in.:
Rozszerzenia[ | edytuj kod]
Pliki Haskella mają rozszerzenie
Library of Congress Control Number (LCCN) – numer nadawany elementom skatalogowanym przez Bibliotekę Kongresu wykorzystywany przez amerykańskie biblioteki do wyszukiwania rekordów bibliograficznych w bazach danych i zamawiania kart katalogowych w Bibliotece Kongresu lub u innych komercyjnych dostawców.
Polimorfizm (z gr. wielopostaciowość) - mechanizmy pozwalające programiście używać wartości, zmiennych i podprogramów na kilka różnych sposobów. Inaczej mówiąc jest to możliwość wyabstrahowania wyrażeń od konkretnych typów.
Kompilator[ | edytuj kod]
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).
Wartościowanie leniwe (ang. lazy evaluation, ewaluacja leniwa) - strategia wyznaczania wartości argumentów funkcji tylko wtedy, kiedy są potrzebne (na żądanie).Biblioteka Narodowa Francji (fr. Bibliothèque nationale de France, BnF) – francuska biblioteka narodowa, znajdująca się w Paryżu. Przewidziana jest jako repozytorium dla wszystkich materiałów bibliotecznych, wydawanych we Francji. Obecnym dyrektorem Biblioteki jest Bruno Racine.
Przykłady[ | edytuj kod]
-- Komentarz
silnia 0 = 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
| x < 0 = -1
myproduct = 1
myproduct (n:m) = n * myproduct m
mysum = 0
mysum (n:m) = n + mysum m
-- wyrażenia TreeOfMath mają postać: (Sub (Mult (Leaf 5) (Leaf 4)) (Add (Leaf 3) (Leaf 2)))
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))
Przypisy[ | edytuj kod]
- Paul Hudak, John Hughes, Simon Peyton Jones, Philip Wadler: A History of Haskell: Being Lazy with Class. 2007. ISBN 978-1-59593-766-7.
- Simon Marlow: Announcing Haskell 2010 (ang.). Haskell (lista dyskusyjna). [dostęp 2015-12-12].
Linki zewnętrzne[ | edytuj kod]
Kontrola autorytatywna (czysto funkcyjny język programowania):LCCN: sh93003496 GND: 4318275-6 BnF: 12362303j BNE: XX541061
Literate programming (ang. programowanie piśmienne) - styl programowania oparty na założeniu, że programy komputerowe powinny być pisane z naciskiem na czytelność kodu źródłowego dla ludzi, podobnie do dzieła literackiego.Język programowania – zbiór zasad określających, kiedy ciąg symboli tworzy program komputerowy oraz jakie obliczenia opisuje.
Warto wiedzieć że... beta
Programowanie funkcyjne (lub programowanie funkcjonalne) – filozofia i metodyka programowania będąca odmianą programowania deklaratywnego, w której funkcje należą do wartości podstawowych, a nacisk kładzie się na wartościowanie (często rekurencyjnych) funkcji, a nie na wykonywanie poleceń.
Kompilator – program służący do automatycznego tłumaczenia kodu napisanego w jednym języku (języku źródłowym) na równoważny kod w innym języku (języku wynikowym) . Proces ten nazywany jest kompilacją. W informatyce kompilatorem nazywa się najczęściej program do tłumaczenia kodu źródłowego w języku programowania na język maszynowy. Niektóre z nich tłumaczą najpierw do języka asemblera, a ten na język maszynowy jest tłumaczony przez asembler.
C – imperatywny, strukturalny język programowania wysokiego poziomu stworzony na początku lat siedemdziesiątych XX w. przez Dennisa Ritchiego do programowania systemów operacyjnych i innych zadań niskiego poziomu.
Język maszynowy (kod maszynowy) – język programowania, w którym zapis programu wymaga instrukcji bezpośrednio jako liczb, które są rozkazami i danymi bezpośrednio pobieranymi przez procesor wykonujący ten program.
GCC (ang. GNU Compiler Collection) - zestaw kompilatorów do różnych języków programowania rozwijany w ramach projektu GNU i udostępniany na licencji GPL oraz LGPL.
Hiszpańska Biblioteka Narodowa (Biblioteca Nacional de España) – największa biblioteka w Hiszpanii i jedną z największych na świecie. Znajduje się w Madrycie, a dokładnie przy Paseo de Recoletos.
Kontrola autorytatywna – w terminologii bibliotekoznawczej określenie procedur zapewniających utrzymanie w sposób konsekwentny haseł (nazw, ujednoliconych tytułów, tytułów serii i haseł przedmiotowych) w katalogach bibliotecznych przez zastosowanie wykazu autorytatywnego zwanego kartoteką wzorcową.