Newsgroup: it.comp.programmare
Titolo: Haskell?

Qualcuno qui ha mai programmato in haskell? Impressioni?
 
vedendo il GHC sembra molto ben integrato con il sistema, pu� perfino 
fare grafica 3D con le OpenGL.
 
Ho una piccola esperienza con il prolog e so gi� che il cambiamento di 
paradigma mi costringer� a reimparare a programmare da capo... che � 
esattamente il motivo per cui mi interessa provare haskell :-)
 
Quanto tempo serve per poter dire di conoscere bene haskell?

 
 
Io, un po'.
Il linguaggio è veramente bello, elegante e, una volta entrati nell'ottica
delle monadi (che inizierai a vedere dopo un po' che lo studi, e che di solito
sono lo scoglio maggiore) anche semplice.
Spesso si sente dire che è un linguaggio "inutile", perché mentre è banale
scrivere algoritmi matematico-fisici complessi è "complesso" fare
programmazione imperativa in maniera pulita (il che significa che l'I/O è un
puzzle sia da scrivere che da leggere).
Magari mischiato ad altri linguaggi, oppure per cose di puro calcolo è ottimo,
io direi che vale la pena vederselo per bene anche solo per cultura generale.
Non ti aspettare di trovare tanti che usano, men che meno offerte lavorative
che lo richiedano.
M2C
 
Ciao!

 puzzle sia da scrivere che da leggere).
 
Anche il prolog soffre dello stesso problema. Magari � solo questione di 
ripensare le modalit� di I/O e trovarne di pi� adatte... vabb� :-)

 Quanto tempo serve per poter dire di conoscere bene haskell?
 
Due problemi: cosa intendi con "conoscere bene" e cosa intendi con
"tempo". Mi spiego meglio: se sei minimamente familiare con
l'informatica, il cuore di Haskell lo conosci gia'. Magari ti manca la
sua sintassi, ma il modo di ragionare lo hai. Ovviamente la sintassi e'
qualcosa che si impara in termini di giorni. 
 
Per dire, non sono un fanatico di Haskell, ma mi capita spesso di usare
una cosa che praticamente e' haskell come pseudocodice.
 
r lst = r lst []
r [] a = a
r h:t a = r t h:a
 
Ecco.. questo e' 99% Haskell valido. Per motivi di precedenza devi
scrivere (h:t) a sinistra dell'uguale e non puoi avere la funzione con
due diversi argomenti... quindi la funzione di appoggio dovresti
chiamarla r'.
 
Poi c'e' quello che potrebbe pensare che e' piu' divertente scriverlo
cosi':
 
    r' :: [a] -> [a] -> [a]
    r' [] = id
    r' (h:t) = r' t . (:) h
 
ecco un esempio di pointless programming. Nota che ho volontariamente
omesso un argomento definendo, di fatto, invece di una funzione che
prende due liste e ritorna una lista, una funzione che prende una lista
e ritorna una funzione che prende una lista e ritorna una lista.
Le due cose sono ovviamente equivalenti, ma una la si riconosce ad
occhio, l'altra viene da chiedersi se sono ubriaco di prima mattina.
 
Poi c'e' l'uso corretto delle monadi, capire che un sacco di tipi
composti sono in effetti monadi. Trascendere le monadi. Prendere
confidenza con l'universo esteso di Haskell.
 
Non so dirti. Dipende appunto cosa intendi con "bene". E dipende quanto
tempo ci studi sopra. Uno studente sveglio magari ci mette 6 mesi - un
anno. Ma lui puo' applicare Haskell a tutti quanti i suoi problemi e ha
quintali di tempo libero (o liberabile) per lo studio. 
 
Sinceramente ho guardato Haskell la prima volta nel 2004/2005 (o forse
era l'anno prima, boh). Non ci ho investito piu' di tanto, ogni tanto me
lo guardo... e non direi di conoscerlo "bene". Ma, appunto, non ho
dedicato mai troppo tempo sul linguaggio... lo leggo, perche' mi e'
fondamentale leggerlo (tra l'altro, ne leggo agevolmente la parte
funzionale). So scrivere in Haskell. So cercare le librerie.
Ma non direi di conoscerlo "bene", come dicevo. Non ho la fluenza che
ho, per dire, con Python. 
 
Viceversa, conosco parecchi ragazzi che ci si sono affezionati, ci hanno
investito e, alla fine dei conti, lo hanno imparato bene. Qualche
annetto per un "bene ragionevole". Come per ogni linguaggio. Se pensi
che per imparare un linguaggio "bene" ci voglia meno, semplicemente
stiamo usando definizioni diverse del concetto relativamente vago "bene"
e riadatta la scala sul tuo. Ecco... direi che ci va, grosso modo, un
tempo comparabile con C++. Drasticamente minore se uno e' molto a suo
agio con la teoria, drasticamente maggiore se a uno la matematica e
l'informatica teorica vanno un po' di traverso.
 
 
 
 
 
 
 
-- 
-riko
http://www.enrico-franchi.org/
 
http://rik0-techtemple.blogspot.com/
 

 ripensare le modalit� di I/O e trovarne di pi� adatte... vabb� :-)
 
No. Prolog non soffre nemmeno lontanamente di questo problema. Prolog ha
tanti problemi (mancanza di standard -- o meglio, lo standard c'e', ma
ognuno continua a fare quello che gli pare).
 
Prolog e', fra i linguaggi logici, un linguaggio estremamente ibrido,
che di fatto ha una semantica sufficientemente ibrida da permettere
facilmente uno stile imperativo.
 
Se in mezzo alla piu' logica e pura delle procedure infili un write, lui
il termine te lo stampa. Viceversa, in Haskell questa cosa diciamo che
non puoi farla.


 che lo richiedano.
 
"Tante" numericamente, no. Se per "tante" intendiamo qualcosa come
"numero di offerte per fare il sito web della Tondelli & Brugole s.r.l".
 
Di posti pesantemente orientati ai linguaggi funzionali io ne vedo (non
necessariamente tante in italia), e tipicamente considerano "uno vale
l'altro". Ovvero se sei bravo con Haskell e loro usano OCaml gli importa
poco: sanno gia' che sei in grado di prenderlo in davvero poco tempo e,
verosimilmente, di scrivere codice decente.
 
Inoltre in molti posti "grossi" e "cool" avere esperienza su queste
tecnologie e' decisamente un plus, anche se poi non necessariamente
verranno usate. Cosa poi nemmeno da escludere, visto quanto si usa
Erlang di questi tempi.
