Newsgroup: it.comp.ia
Titolo: Lisp ?

Le mie domande vi suoneranno un po'
noiose, ma come ho gia' detto qualche
messaggio fa, sono un ignorantone dell'IA,
che tuttavia mi affascina lo stesso tantissimo...
Sto leggendo, come introduzione, un bel libro
consigliato da Douglas Hofstadter:
"La macchina e la mente", di George Johnson ,1990, IHT.
Ad un certo punto si inizia a parlare del
Lisp, come linguaggio di programmazione
(che conosco un po' sotto forma di autolisp
per autocad) che possiede una caratteristica
unica: quella di potersi autoscrivere:
"A causa dell'ambiguita' tra il soggetto
(il programma) e l'oggetto (le informazioni
da elaborare), un programma scritto in Lisp
poteva fornire la farina per il mulino di
un altro, i programmi ne potevano leggere e
scrivere altri, potevano persino autoanalizzarsi
e modificarsi, suggerendo la possibilita' di un
software che non soltanto apprendeva, ma era anche
consapevole della propria esistenza." (pag.20)
Il libro continua dicendo che negli anni
successivi il lisp divento' il linguaggio
principe per gli studiosi di AI...
Ho fatto un giro sul sito non ufficiale
di questa NG: 
http://digilander.iol.it/newtech/ailab.htm
ma non ho trovato granche' sul lisp:
e' stato abbandonato?
Se č cosě, quale linguaggio lo ha
sostituito ed e' in grado
di fare quello descritto sopra?
Certo non il C o il visual basic...
o forse si?
Grazie.
            Manuel

 o forse si?
Non č molto utilizzato (almeno in confronto a linguaggi piů "classici" 
come C/C++, Java, VB, etc. etc), ma di sicuro non č morto. Ti segnalo, 
se vuoi darci un'occhiata,  un paio di link ad altrettante news passate 
su SlashDot un po' di tempo fa: 
http://slashdot.org/article.pl?sid=01/05/01/1539239&mode=thread
http://slashdot.org/article.pl?sid=01/09/08/0113203&mode=thread
Il primo č particolarmente interessante. Avresti mai detto che c'č 
proprio il Lisp dietro a Yahoo Store? 
Bye!
--
May the Force be with you!

 consapevole della propria esistenza."
Tralasciando l'impostazione vagamente filosofica,
probabilmente adeguata al libro in questione
(che purtroppo non ho letto), e' indiscutibile il fascino
di questa caratteristica.( e a mio parere e' una strada, ancora
aperta, verso un vera applicazione di IA).
Cerchero' brevemente di spigarti, cercando di rimanere
il piu' conciso possibile per i fanatici del "short message" :-)
anche se il discorso, oltre ad essere "bello" e' un po' lungo...
quindi mi scuso in anticipo.
I cardini su cui si appoggia una tesi come questa sono:
* un linguaggio dichiarativo e funzionale, che, al di la' dei
paroloni, molto ma molto sinteticamente ha la capacita'
di usare il concetto di funzione e composizione di funzioni.
Ed e' qui il motivo del Lisp (puro), l'unico (o quasi) che
implementa' una programmazione di questo tipo. I citati C,
VB, Pascal ecc.. sono linguaggi imperativi.
* la programmazione genetica. Occhio, non algoritmo genetico
ma <programmazione> genetica. Il passaggio da uno all'altro
richiederebbe un discorso un po' lungo => un altro thread,
altrimenti perdiamo il filo del discorso. Se volete si puo' anche fare...
Ora, immagina di avere una funzione, e considerala in senso lato,
cioe' come insieme di "operandi" e "operatori" che svolgono appunto
una funzione. Una delle possibili rappresentazioni e' costituita dai
cosiddetti alberi sintattici, cioe' strutture ad albero in cui ogni nodo
rappresenta uno degli operatori ammessi dalla grammatica. I figli di
ciascun nodo rappresentano gli argomenti dell'operatore. Le foglie
saranno costituite da quegli elementi che non richiedono argomenti per
essere valutati. Diciamo che quella che ti ho presentato e' una sorta
di rappresentazione Lisp-like ma tale linguaggio ha, come ti ho detto,
particolari caratteristiche che lo rendono piu' efficiente per lo scopo.
A questo punto, se immagini di definire opportuni operatori genetici
(tipo quelli degli algoritmi genetici come il crossover o la mutazione)
che operano su questo tipo di rappresentazione e applicando l'algoritmo
"standard" di evoluzione che si usa normalmente negli algoritmi genetici,
e' possibili far evolvere una popolazione di funzioni e quindi in pratica,
<generare programmi>.
Il passaggio e' proprio questo, far evolvere genomi che rappresentano
il codice di funzioni o addirittura programmi, non soltanto parametri.
Cavoli, mi rendo conto di aver scritto troppo, chiudo qui e mi scuso
ancora per la lunghezza... ma il discorso meriterebbe a mio parere
diversi approfondimenti. Sopratutto qui su it.comp.ia.
--
Fabrizio
http://microservo.webhop.org
----------------------------------------------------------
 " Abbiamo preso sul serio qualcosa
     con cui ci e' permesso solo giocare
       o viceversa ? "
                              <Albert Hofmann>
----------------------------------------------------------

 ma non ho trovato granche' sul lisp:
ciao,
sono il webmaster di AILab,
scusa, ma devo dirti che non hai guardato bene:
--> nella sezione ARTICOLI trovi un Tutorial sul Lisp, introduttivo, in italiano
--> nella sezione LIBRI trovi "Common Lisp the Language" in inglese
--> nella sezione CORSI trovi "Corso interattivo sul LISP con esercizi" in inglese
grazie per averlo visitato,
Ciao,
Davide

             Manuel
Ciao!
maurizio

Innanzitutto, grazie di cuore per le
pazienti risposte.. :-)
Poi volevo dire a Davide che avevo
visto le sezioni sul lisp dell'AILab, solo
che davanti alla vastita' generale del
sito (mi sono sentito in fondo al
baratro dell'ignoranza...) mi sembrava
comunque poco per un linguaggio
tanto basilare per l'AI quale era stato
descritto nel libro citato sopra...
Maurizio mi ha detto che
".. questo non e' esatto, in quanto qualsiasi linguaggio che supporti lo
scripting (incluso VB) puo' assemblare una lista di istruzioni ed
eseguirla.."
e quindi credevo di aver capito perche' il Lisp aveva perso
la sua importanza. Ma poi Brissio mi dice
"Ed e' qui il motivo del Lisp (puro), l'unico (o quasi) che
implementa' una programmazione di questo tipo. I citati C,
VB, Pascal ecc.. sono linguaggi imperativi."
E sono tornato a zero...
Volendo fare qualche prova con il Lisp, dove posso
trovare un compilatore freeware? (Esiste vero?)
Il tema Programmazione Genetica di Brissio e' bellissimo,
solo che ammetto di seguirlo con molta difficolta'; se volete
aprire una discussione mi piacerebbe seguirla come
spettatore, poiche' non credo di avere la competenza neppure
per potervi intervenire...
Del Python che mi dite? Lo conosco perche' mi diletto
a programmare gli script per Blender, un noto programma
di grafica 3D totalmente freeware, ma mooolto potente.
Se vi puo' interessare fateci un salto:
www.blender.nl
Anche il python non scherza, e perdipiu' e' multipiattaforma...
ed e' freeware.

 per potervi intervenire...
Non penso, e' solo questione di documentarti un po'...
non e' nulla di trascendente ma sicuramente a mio parere e'
uno degli aspetti piu' interessanti dell'evoluzione del concetto
di programmazione.
Se vuoi puoi tralasciare inizialmente l'aspetto linguaggio
(Lisp/Prolog/altri..);  guardati qualcosa sugli algoritmi
genetici, poi passa alla programmazione genetica.
L'applicazione piu' frequente e' riferita ai problemi di ottimizzazione.
Se vuoi imparare i linguaggi in questione cerca prima di
capire il diverso approccio che usano rispetto a quelli
che solitamente siamo abituati ad usare (gli imperativi appunto)...
nonostante qualche difficolta' avrai sicuramente un quadro
migliore soprattuto del perche' esistono :-)
C'e' un aspetto che trovo interessante. Nulla togliendo alle altre
tecniche di IA che come sappiamo riescono ad ottenere discreti
risultati ma in "limitati" (inteso come <specifici>) campi di
applicazione, i risultati della genetic programming mi hanno sempre
lasciato parecchio sbalordito. Sembra di per se' una delle tecniche
piu' "esoteriche" ma ha permesso di ottenere (specialmete in campi
tecnico/ingegneristici) risultati altamente competitivi a quelli ottenuti
"dall'uomo". Alcuni di questi hanno confutato o rivalutato sotto altri
punti di vista parecchi teoremi e/o brevetti precedentemente pubblicati.
I campi sono quelli ingegneristici, controllo ottimo (ottimizzazione),
identificazione e modellizzazione di sistemi, biologia molecolare, design
di circuiti elettronici (filtri,ampli, identificatori di sorgente,...) e
parecchi
altri. Va be', ci vanno giu' pesante... programmazione genetica parallela,
hardware da paura... ma la strada secondo me e' da tenere d'occhio
per chi ha un po' di interesse su questi argomenti.


 ed e' freeware.
Scegliere un linguaggio multipiattaforma è molto importante oggi.
Cmq credo che la scelta migliore sia sempre a seconda di quello
che uno deve fare e di cio' che conosce meglio.
Saluti
Davide

 ed e' freeware.
Scegliere un linguaggio multipiattaforma è molto importante oggi.


Giusto per la cronaca, e per non fare torto a nessun linguaggio,; IMO la
scelta di uno strumento č legata intimamente agli obbiettivi prefissati e
non ad una particolare tecnica di programmazione.
Ciao!
maurizio
// Versione LISP // - dall'archivio files
; Good ol towers of hanoi
;
; Usage:
;      (hanoi <n>)
;          <n> - an integer the number of discs
(defun hanoi(n)
  ( transfer 'A 'B 'C n ))
(defun print-move ( from to )
  (princ "Move Disk From ")
  (princ from)
  (princ " To ")
  (princ to)
  (princ "\n")
  nil)
(defun transfer ( from to via n )
  (cond ((equal n 1) (print-move from to ))
 (t (transfer from via to (- n 1))
    (print-move from to)
    (transfer via to from (- n 1)))))
// Versione QBasic // ...e qui e' d'obbligo ringraziare l'anonimo lentino
=8^)
    per la graditissima rimpatriata...
INPUT "Numero di dischi "; NrDischi%
Torri "A", "B", "C", NrDischi%
SUB Torri (Partenza$, Arrivo$, Appoggio$, NrDischi%)
  IF NrDischi% = 1 THEN
    PRINT "Prendo il disco da "; Partenza$; " lo metto in "; Arrivo$
  ELSE
    Torri Partenza$, Appoggio$, Arrivo$, NrDischi% - 1
    Torri Partenza$, Arrivo$, "", 1
    Torri Appoggio$, Arrivo$, Partenza$, NrDischi% - 1
  END IF
END SUB

[...]
Aggiungo anch'io un contributo ai tuoi....
Impostate il font 'fisso' :-)
// Versione Obfuscated C : Torri di Hanoi
            main(
            ){int
            z,y,n
       ;scanf("%d",&n);
       for(y=1;(1<<n)-y
       ;y<<=z-1,printf(
"disk %i from %i to %i.\n"/**/
,z,(y&y-1)%3,((y|y-1)+1)%3),y
++)for(z=1;!(y&1);z++,y>>=1);}


Whow!! E qui prima che io possa continuare
la conversazione bisogna che faccia qualche
annetto di studi...
A parte gli scherzi, siete davvero competenti...
Un grazie di cuore a Davide: i consigli ed il
sito che mi ha dato sono eccellenti...
lisp.org
 e' davvero completo: penso che riusciro'
a raccapezzarmici; sono abbastanza abituato al
genere (cfr. www. 
python.org
 ) ...
Per quel che riguarda i settori applicativi dei
programmi, io forse un po' (un bel po' ?)
superficialmente davo per buone le definizioni
che volevano i linguaggi abbastanza
specializzati.  Ad esempio, avevo sentito
dire che il Fortran era ottimo per la
matematica, come indicato dal nome
stesso: FORmula TRANsizion.
Allo stesso modo il Cobol (COmmon
Business Oriented Language) era piu'
comodo per i gestionali, mentre il
Basic (Beginner's All-purpose
Symbolic Instruction Code) era semplice
ma poco ottimizzato...
Poiche' in verita' conosco un tantino solo
l'ultimo, immagino che in realta' ormai queste
divisioni siano quasi scomparse, ma forse
una sorta di vocazione preferenziale ancora
esiste...
D'altronde la mia domanda sul Lisp nasce
da questa convinzione di settorialita':
il Lisp fu pensato e creato da
John McCarthy proprio per l'AI, per cui
supponevo che per questi obiettivi
fosse piu' versatile e potente
di tutti gli altri...
Grazie ancora per le indicazioni...
vado subito a sbirciare su 
lisp.org
:-)
               Manuel

Detto in poche parole, stai parlando di programmi che si modificano da soli
;)
Ottimo concetto che pare avere delle stupende implicazioni in teoria... ma
che non si riesce ad applicare praticamente, AFAIK... conosci qualche
esempio di realizzazione con tali tecniche ? La studierei volentieri !
Stefano (il riassuntore)

 ma poco ottimizzato...
Vero, tuttora usato a scopi didattici...
Direi che ti mancano una buona sequenza di linguaggi moderni :-)
Stefano