Haskell (linguaggio)

Da Wikipedia, l'enciclopedia libera.
Vai a: navigazione, cerca

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

  1. ^ (EN) Future, sviluppo futuro di Haskell.
  2. ^ (EN) Welcome to Haskell', il Wiki di Haskell'.

[modifica] Voci correlate

[modifica] Altri progetti

[modifica] Collegamenti esterni

informatica Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica