Haskell
Från Unix.se, den fria unixresursen.
Haskell är ett icke-strikt, statiskt, rent funktionellt språk som fått sitt namn efter Haskell Curry. Det påminner mycket om Miranda.
Innehåll |
Statisk typning
Trots att språket använder sig av statisk typning behöver man allt som oftast inte bry sig om att skriva ner typerna. Haskell klarar själv att lista ut den mest generella typen för funktionen. Exempel:
foo x y = print (x ++ y)
Här listar Haskell ut att x och y är listor av samma typ (eftersom ++ sätter ihop två listor), och att den typen går att skriva ut (den är medlem i typklassen Show). Ibland är det dock bra i dokumentationssyfte att skriva ut typerna manuellt.
Exempel
Tack vare språkets lata natur, kan vi i Haskell enkelt arbeta med oändliga datastrukturer. Några roliga exempel:
-- Listan med alla fakulteter facs = 1 : zipWith (*) facs [1..] -- Listan med hela fibonacci-serien fibs = 1 : 1 : zipWith (+) fibs (tail fibs)
Haskell kommer endast att evaluera de delar av listorna som behövs för att beräkna ett visst uttryck. T.ex. kan vi plocka ut de tio första elementen ur fibonacci-listan, och då kommer bara dessa att beräknas.
> take 10 fibs [1,1,2,3,5,8,13,21,34,55]
Som man lätt inser blir det dock fortfarande problem med uttryck som måste titta på varje element i den oändliga listan:
> filter (<10) fibs [1,1,2,3,5,8, ERROR - Garbage collection fails to reclaim sufficient space
Kanske inte så underligt. I detta fall vill vi istället göra så här:
> takeWhile (<10) fibs [1,1,2,3,5,8]
Externa länkar
Information
- Officiell sida (http://www.haskell.org)
Implementationer
Humor
- Hur skrivs fakultetsfunktionen? (http://www.willamette.edu/~fruehr/haskell/evolution.html)