Haskell (linguaggio)

Da Wikipedia, l'enciclopedia libera.
Haskell
Haskell-Logo.svg
Autore Simon Peyton Jones, Lennart Augustsson, Dave Barton, Brian Boutel, Warren Burton, Joseph Fasel, Kevin Hammond, Ralf Hinze, Paul Hudak, John Hughes, Thomas Johnsson, Mark Jones, John Launchbury, Erik Meijer, John Peterson, Alastair Reid, Colin Runciman, Philip Wadler
Data di origine 1990
Ultima versione Haskell 2010[1] (luglio 2010)
Utilizzo
Paradigmi funzionale, modulare
Tipizzazione forte, statica
Estensioni comuni .hs
Influenzato da Clean, FP, Gofer, Hope e Hope+, Id, ISWIM, KRC, Lisp, Miranda, ML e Standard ML, Orwell, SASL, SISAL, Scheme
Ha influenzato Agda, Bluespec, C++11/Concepts, C#/LINQ, CAL, Cayenne, Clean, Clojure, CoffeeScript, Curry, Elm, Epigram, Escher, F#, Isabelle, Java/Generics, Kaya, Mercury, Omega, Perl 6, Python, Qi, Scala, Timber, Visual Basic 9.0
Implementazione di riferimento
Sistema operativo Multipiattaforma
Sito web haskell.org

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).[2][3]

Il sistema operativo House è scritto in Haskell.

Esempi di programmi[modifica | modifica wikitesto]

Hello, world![modifica | modifica wikitesto]

Il seguente esempio stampa il testo "Hello World".

   main = putStrLn "Hello World!"

Calcolo del fattoriale[modifica | modifica wikitesto]

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]

Calcolo della successione di Fibonacci[modifica | modifica wikitesto]

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)]

Algoritmo di ordinamento generico quicksort[modifica | modifica wikitesto]

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]

Crivello di Eratostene[modifica | modifica wikitesto]

   primes = 1 : dropall [2..] 
      where
         dropall (x:xs) = x:dropall(dropmul x xs) 
           where
              dropmul x l = [y | y <- l, y `mod` x /= 0]

Implementazioni[modifica | modifica wikitesto]

Le seguenti implementazioni sono praticamente fedeli allo Haskell 98.

  • Hugs (Hugs 98), 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 (The Glasgow Haskell Compiler), 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 (nhc98), compilatore bytecode particolarmente adatto a macchine un po' datate grazie al ridotto uso di memoria.
  • yhc (Neil Mitchell - Yhc), o York Haskell Compiler, è un fork di nhc98 mirato ad aumentarne le performance e la portabilità.
  • jhc (jhc) è un compilatore mirato a produrre codice ottimizzato il più possibile, ma allo stato attuale è da considerarsi sperimentale.

Note[modifica | modifica wikitesto]

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

Voci correlate[modifica | modifica wikitesto]

Altri progetti[modifica | modifica wikitesto]

Collegamenti esterni[modifica | modifica wikitesto]

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