Haskell (linguaggio)
Haskell è un linguaggio di programmazione, creato da un apposito comitato negli anni ottanta e chiamato così in onore del logico Haskell Curry. È un linguaggio funzionale, dove l'esecuzione del programma non è dettata dai passi successivi dei linguaggi procedurali tradizionali, ma è il risultato della soluzione di equazioni matematiche. Rispetto ad altri linguaggi dello stesso tipo supporta una semantica di tipo lazy in cui gli argomenti delle funzioni vengono valutati solo se e quando richiesto. Altre caratteristiche distintive riguardano il sistema dei tipi, la purezza delle funzioni e l'applicazione parziale di funzioni automatiche.
È stato creato da un comitato formatosi nel 1987 con il compito specifico di definire un linguaggio con tali caratteristiche. Il precursore diretto di Haskell è Miranda, inventato nel 1985. L'ultima versione del linguaggio è chiamata Haskell 98 e fornisce una versione minimale e portabile del linguaggio.
Il linguaggio è tuttora in fase di rapida evoluzione, con Hugs e Glasgow Haskell Compiler (GHC) che ne rappresentano lo standard di fatto. Nel 2006 è iniziato un lavoro di revisione dello standard Haskell 98 mirato a produrne un'evoluzione conservativa chiamata informalmente Haskell' (Haskell prime).[1][2]
Il sistema operativo House è scritto in Haskell.
Indice |
[modifica] Esempi di programmi
[modifica] Hello, world!
Il seguente esempio stampa il testo "Hello World".
main = putStrLn "Hello World!"
[modifica] Calcolo del fattoriale
Classica definizione del fattoriale:
fac 0 = 1 fac n = n * fac (n - 1)
Definizione più compatta che usa la speciale notazione Haskell per le liste e la funzione standard product:
fac n = product [1..n]
[modifica] Calcolo della successione di Fibonacci
Definizione con pattern matching per numeri naturali e applicazione di higher order functions:
fib = let fib' 0 = 0 fib' 1 = 1 fib' (n+1) = fib' n + fib' (n-1) in map fib' [0..]
Definizione tramite struttura dati circolare:
fib = 0:1:[x+y | (x,y) <- zip fib (tail fib)]
[modifica] Algoritmo di ordinamento generico quicksort
Definizione polimorfa con pattern matching e list comprehension:
qsort :: Ord a => [a] -> [a] qsort [] = [] qsort (x:xs) = qsort l1 ++ [x] ++ qsort l2 where l1 = [y | y <- xs, y<x] l2 = [z | z <- xs, z>=x]
[modifica] Crivello di Eratostene
primes = 1 : dropall [2..] where dropall (x:xs) = x:dropall(dropmul x xs) where dropmul x l = [y | y <- l, y `mod` x /= 0]
[modifica] Implementazioni
Le seguenti implementazioni sono praticamente fedeli allo Haskell 98.
- Hugs ([1]), o Haskell User's Gofer System, è un interprete bytecode portabile per numerose piattaforme. Grazie anche ad un'interfaccia grafica e alla modalità interattiva, costituisce un mezzo eccellente per apprendere il linguaggio Haskell.
- Glasgow Haskell Compiler ([2]), o GHC, costituisce il compilatore Haskell più potente oggi esistente. Può produrre codice nativo per numerose piattaforme e codice C portabile. Contiene numerose librerie ed estensioni del linguaggio.
- nhc98 ([3]), compilatore bytecode particolarmente adatto a macchine un po' datate grazie al ridotto uso di memoria.
- yhc ([4]), o York Haskell Compiler, è un fork di nhc98 mirato ad aumentarne le performance e la portabilità.
- jhc ([5]) è un compilatore mirato a produrre codice ottimizzato il più possibile, ma allo stato attuale è da considerarsi sperimentale.
[modifica] Note
- ^ (EN) Future, sviluppo futuro di Haskell.
- ^ (EN) Welcome to Haskell', il Wiki di Haskell'.
[modifica] Voci correlate
[modifica] Altri progetti
Commons contiene immagini o altri file su Haskell (linguaggio)
[modifica] Collegamenti esterni
- (EN) The Haskell Home Page
- (EN) The Haskell Wiki
- (EN) A Gentle Introduction to Haskell 98 (formato PDF)
- (EN) FP (2005-SS, Giesl), video di lezioni universitarie, in inglese, del corso di "Fondamenti di programmazione funzionale" tenuto dal Prof. Jürgen Giesl. Il corso si fonda sul linguaggio Haskell di cui fornisce un'ottima panoramica. I file contrassegnati da una 'U' seguita da un numero progressivo si riferiscono alle esercitazioni. Pagina del corso
|
|