Newsgroup: it.comp.ia
Titolo: Mi presento anch'io...

Mi sembra di capire che si usi presentarsi, e allora lo faccio anch'io.
Mi chiamo Franco Bernasconi, e abito a Milano. Per vivere mi occupo di
Software Re-engineering, Program Understanding, etc. Da qualche tempo ho
comiciato a leggere un po' di documentazione sull'AI. Soprattutto GA e
Fuzzy,  ANN e shell per ES (sto provando CLIPS), leggendo di tutto un po'
senza approfondire. Da poco ho iniziato con i liguaggi Funzionali.
L'AI mi affascina, ma - ragazzi - è un mondo sterminato ! Ho seguito qualche
thread di questo NG, e vedo che qui c'è gente che sa il fatto suo. Sarei
tentato di approfittarne, e porvi un paio di migliaia di domande :) Ma
comincio da una sola
Sto cercando di capire la Programmazione Funzionale. Vorrei capire che tipo
di problemi è adatta a risolvere, e se può aiutare in qualcosa che sarebbe
*difficile* (non credo impossibile) da fare con metodi "tradizionali".
Ossia, quando è meglio usare un linguaggio funzionale piuttosto che una
qualche altra cosa ?
Per questo mi serve un linguaggio, freeware è meglio, con cui sperimentare,
e di cui in rete si trovino facilmente esempi, documentazione, applicazioni,
etc. Sto guardando SML, ma non sono sicuro che sia la scelta migliore
(pregiudizio dovuto al fatto che lo vedo poco nominato). Da un paio di
giorni anche Python (grazie Morfeus per la segnalazione) che è un linguaggio
molto molto interessante, ma mi sembra debole dal punto di vista funzionale
(se mi smentite ne sarò ben felice). Stavo pensando a Scheme, o dovrei
iniziare dal Lisp ? E Haskell, non vogliamo considerarlo ? Mamma mia, che
casino ! Esiste, che ne so, una buona "prova comparativa" dei LF, per
capirne le differenze senza studiarli tutti ? Qualche consiglio ?
Grazie per le risposte (if any), e saluti a tutti
Franco
----------------------------------------------------------------------------
-----------------------------------
- Salve, mi presento, sono Curlus il Riccio, Maestro di Umorismo Sarcastico
- Io mi chiamo Peter, ma non so come mi presento
- Uhm, direi piuttosto maluccio
Da: B.C. di Johnny Hart

 *difficile* (non credo impossibile) da fare con metodi "tradizionali".
Poiche' ogni linguaggio contemporaneo reale per computer viene in 
qualche modo tradotto in forma imperativa, qualunque problema che e' 
possibile affrontare con un qualsiasi linguaggio, e' affrontabile anche 
con un linguaggio imperativo.
La scelta, dipende quindi dal tipo di problema e dai gusti dell'autore.
Essendo i linguaggi funzionali molti e vari (c'e' pure 
comp.lang.functional) e' difficile proporre qualcosa senza conoscere la 
situazione, ma forse Haskell e' il piu' popolare.
vai su 
http://www.cs.nott.ac.uk/~gmh/faq.html
 per un buon punto di 
partenza sui LF.
-- 
C++U
  Gio "FrOYd" Caturano / Zetha gameZ
 
http://www.dronez.com

iniziare dal Lisp ? 
Scheme *e'* un lisp. :)
All'atto pratico, nella mia esperienza, quel che e' utile e' aver un 
sottosistema logico/funzionale all'interno di un contesto procedurale o object-
oriented. Io appunto mi trovo benissimo con l'accoppiata java/C++-prolog, che 
si completano a vicenda in modo perfetto. Cose come Tirs, Clips (o Jess) sono 
orientate esplicitamente ai sistemi esperti e sono da scegliere se quello e' il 
tuo interesse. Per il resto, tieni presente che in ambito AI (e accademico in 
generale) nasce un nuovo linguaggio al giorno.. :)
-- 
God is Real, unless declared Integer.
ObjectZone - 
http://space.tin.it/computer/csadun/

Forse ho capito cosa vai cercando:
1) Amzi Prolog - Visual Prolog  o
2) Lisp - nelle sue varie forme: xlisp, clips, scheme, ecc.....
ciao, Morfeus
(p.s. ho sentito dire che al mit hanno fatto un linguaggio lisp molto
evoluto,
ti faro sapere...)
--
http://digilander.iol.it/newtech/ailab.htm
Sito dedicato all' Intelligenza Artificiale e alla Robotica

 con un linguaggio imperativo.
Quello che dici è vero. Però il mio problema è che, a volte, ho la famosa
sensazione di piantare chiodi usando il manico di un cacciavite, e mi sto
guardando in giro per cercare qualcosa che somigli a un martello.
Nel  SW che progetto vorrei inserire delle cose che trovo "difficili" da
realizzare con gli algoritmi chiamiamoli "classici", e cerco di capire le
tecniche dell'IA alla ricerca di qualcosa che mi possa aiutare.
Per esempio, un sistema basato su un Input di valori di Verità di alcuni
Fatti  (magari Fuzzy, invece che Bool) su cui applicare Regole per dedurre
nuovi Fatti su cui applicare Regole [ ad libitum ] . potrei senz'altro
scriverlo in C o in Java, ma credo che se usassi uno strumento come CLIPS,
avrei trovato un buon martello.
Quello che sto cercando di capire: quand'è che la Programmazione Funzionale
può essere un buon martello? (Lisp, Haskell o SML che sia). O la PF è solo
Yet Another Programming Paradigm ?
Se sto andando OT, fermatemi.
Ciao, e ancora grazie

 affatto poco, in effetti.
Certo, ma visto che teoricamente qualunque cosa si potrebbe scrivere in asm,
l'uso di un linguaggio HL, normalmente, è motivato dal fatto che dispone di
strutture dati o costrutti, che "mappano" meglio di altri il problema da
risolvere. Probabilmente non ne capisco lo spirito, e riduco erroneamente,
ad es, la manipolazione di liste all'applicazione di algoritmi ricorsivi ad
array Oggetti, ma mi chiedo:
visto che continuo a leggere che la Programmazione Funzionale è uno dei
*cardini* dell'AI, ci sarà pure un motivo ?
Ciao

 evoluto, ti faro sapere...)
Molto volentieri, grazie.
Per la verità, ho già un saco di roba da guardare, ma se cìè qualcosa di
recente ed evoluto,  può essere che raccolga il meglio dei suoi
predecessori. Se poi viene dal MIT. si presenta bene.
Comunque, mi dai già una bella mano col tuo sito. Ho seguito un po' di link,
e ho trovato cose interessanti.
Purtroppo passerò un solitario agosto in città :(( ma almeno avrò il tempo
per studiarmi le tons di materiale che sto scaricando :))
Ciao
P.S. Col capo cosparso di cenere, ti prometto che in settimana ti faccio
quelle fotocopie sui  Sistemi Formali. Appena pronte ti mando una mail.

*cardini* dell'AI, ci sarą pure un motivo ?
Hm, genericamente.. la cosa ha a che fare principalmente con le dimensioni e il 
tipo dello spazio delle soluzioni, e i processi di computazione per 
raggiungerli. Se i primi sono piccoli, o i secondi sono pochi, un linguaggio 
imperativo (sempreche' tu abbia a disposizione le dovute librerie, nota, che 
non e' sempre ovvio) e' piu' che adeguato.
Se invece hai uno spazio di soluzioni largo, o/e dinamico e i cammini di 
calcolo non sono identificati a priori, o semplicemente molti, un linguaggio 
funzionale puo' costituire un'alternativa piu' compatta, o 
efficace, o flessibile/manutenibile.
Esempio pratico: un sistema di controllo rule-based. O una rete semantica o una 
rete di bayes; o un sistema di data mining; tutti sicuramente denotabili in 
termini imperativi, ma la descrizione funzionale - che permette di dichiarare 
direttamente proprieta ' del sistema, note o desiderate, e' spesso piu' 
semplice da costruire o mantenere. Aggiungere una regola sensata ad un database 
prolog e' questione di un momento, aggiungerla ad un sistema descritto 
staticamente in termini di procedure o oggetti richiede piu' sforzo, per non 
parlare dei possibili side-effects sulla coerenza interna.
In effetti, per quanto riguarda lisp (e prolog, in certi termini), un vantaggio 
radicale rispetto alla maggioranza di linguaggi imperativi e' la completa 
ridefinibilita' e possibilita' di valutazione runtime. Hai mai usato un 
lingaggio di scripting dotato di una "eval" - tipo, che so tipo il costrutto`` 
di sh? Quante volte vorresti averle avute in C++ o Java? Il tipo di vantaggio 
e' quello. Java e' un passo in avanti rispetto a C++, per il fatto che il 
loading e' dinamico ed il programma e' tutt'altro che monolitico, ma ancora non 
si ha la totale flessibilita' che puoi avere in lisp/prolog. 
Si potrebbe dire, che il vantaggio c'e' ovunque la descrizione *dinamica* della 
computazione e' maggiore rispetto a quella statica. Chiaro che non ha molto 
senso costruire un gestionale in prolog (nel senso che lo si costruisce almeno 
altrettanto bene in visual basic) :). Ed e' anche vero che lisp e prolog si 
integrano incredibilmente bene con modelli object-oriented (ed e' questo il 
modo in cui io preferisco usarli), ottenendo cosi' il meglio dei due mondi (che 
sembra quasi il titolo di un film).
A onor del vero, c'e' da dire che quando questi linguaggi nacquero, il paragone 
con i linguaggi imperativi dell'epoca era molto stridente anche per il corredo 
e la capacita' delle librerie. "lista" ad esempio e' qualcosa che oggi, in Java 
o C++ ANSI, si da' abbastanza per scontato: ma anche solo pochi anni fa (e 
prima dell'incredibile libreria di Java) non lo era affatto. Alzi la mano chi 
ha lavorato in C++ pre-3.0 e non ha mai scritto una sua bella classe "lista"..
Se hai tempo e voglia, dai un'occhiata a questo articolo di Richard Gabriel 
(consigliatomi a suo tempo dal buon Paolo), biased, ovviamente, ma interessante 
perche' disincantato:
 
http://www.ai.mit.edu/docs/articles//good-news/good-news.html


 Yet Another Programming Paradigm ?
Beh, si', ma gia' non e' poco, o mi sbaglio?
Secondo me la PF non e' utile in assoluto, puo' essere utile a 
determinate persone in determinati contesti.
Io ho _dovuto_ fare un progetto in AutoLisp, tempo fa.
Ora l'AutoLisp e' l'ennesima pseudo-variante di qualche pseudo-lisp, che 
qualche pseudo-progettista della Autodesk ha deciso che era piu' 
semplice da imparare per i non programmatori.
Ora, ammesso e non concesso che esista un grafico che ha imparato 
l'AutoLisp, posso assicurarti che, con la mia forma mentis 
(estremamente) tradizionalista, per me quel progetto e' stato un bel 
"pain in the ass".
C'e' anche un'altra faccia della medaglia: linguaggi troppo staccati dal 
livello dell'hardware possono indurre in pesantissimi errori che invece 
certamente non sarebbero sfuggiti a programmatori tradizionali: e' il 
caso del software dell'Arianne, scritto da un manipolo di francesi, in 
ADA (a language for the real world) - il piu' disastroso bug della 
storia (in termini economici), per due variabili in overflow (su un 
gruppo di sette, non di centotrenta, che dovevano essere controllate).
Dubito che il problema ci sarebbe stato se il programma fosse stato 
scritto in C... 8)


 wrote in message
8m3rvm$2ngq$1...@stargate1.inet.it...

fai pure con comodo , non ho fretta..
fammi sapere in email
ciao e grazie di nuovo.
Morfeus

 con un linguaggio imperativo.
Quello che dici è vero. Però il mio problema è che, a volte, ho la famosa
sensazione di piantare chiodi usando il manico di un cacciavite, e mi sto
guardando in giro per cercare qualcosa che somigli a un martello.
Nel  SW che progetto vorrei inserire delle cose che trovo "difficili" da
realizzare con gli algoritmi chiamiamoli "classici", e cerco di capire le
tecniche dell'IA alla ricerca di qualcosa che mi possa aiutare.
Per esempio, un sistema basato su un Input di valori di Verità di alcuni
Fatti  (magari Fuzzy, invece che Bool) su cui applicare Regole per dedurre
nuovi Fatti su cui applicare Regole [ ad libitum ] . potrei senz'altro
scriverlo in C o in Java, ma credo che se usassi uno strumento come CLIPS,
avrei trovato un buon martello.
Quello che sto cercando di capire: quand'è che la Programmazione Funzionale
può essere un buon martello? (Lisp, Haskell o SML che sia). O la PF è solo
Yet Another Programming Paradigm ?
Se sto andando OT, fermatemi.
Ciao, e ancora grazie






Certo, ma visto che teoricamente qualunque cosa si potrebbe scrivere in asm,
l'uso di un linguaggio HL, normalmente, è motivato dal fatto che dispone di
strutture dati o costrutti, che "mappano" meglio di altri il problema da
risolvere. Probabilmente non ne capisco lo spirito, e riduco erroneamente,
ad es, la manipolazione di liste all'applicazione di algoritmi ricorsivi ad
array Oggetti, ma mi chiedo:
