Lisp: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
Nessun oggetto della modifica
Riga 1:
'''[[w:Lisp|Lisp]]''', che significa "'''List interactiveLis'''t system process'''P'''rocessor language" (sistemalinguaggio per processare interattivamante liste), è un linguaggio di programmazione che nasce ad opera di John McCarthy nel 1959 molto utilizzato pernel programmazionecampo indella A.I. (intelligenza artificiale). È molto semplice da usare ed a imparare. Orientato alla logica ed ad una programmazione funzionale ricorsiva è stato impiegato per programmazione di basso livello e di alto livello ad oggetti. È stato il primo linguaggio ad adottare i concetti di ''Virtual Machine'' e ''Virtual Memory management''.
 
Usato oggi per creare WEBsiti web dinamici, sistemi esperti, progetti di A.I., motori infenzialiinferenziali con base dati della conoscenza al servizio di ''problem solving'' di strategia, NASA, NCSA, e Difesa Americana lo vedono ancora come strumento strategico per le potenti opportunità che ancora oggi fanno di questo linguaggio il maggior ''competitor'' di nicchia, in contrapposizione a [[w:Java (linguaggio|Java]], [[w:C++|C++]] e C#, [[w:object oriented|object oriented ]].
 
Il '''Lisp''' è un linguaggio di programmazione elegante, sintatticamente semplice e di facile apprendimento, usato per la sua flessibilità e la propensione a manipolare variabili con astrazione di oggetti complessi quali liste di dati. La sua particolare caratteristica funzionale e ricorsiva lo rende tanto flessibile da essere l'unico linguaggio in grado di interpretare/compilare se stesso con un polimorfismo nellanel quale i dati diventano codice e il codice viene manipolato come un dato.
 
Per questo manuale ''on-line'' useremo vari interpreti/compilatori lisp OpenLisp open-source.
 
== Breve storia ==
Tra il '59 ed i primi anni '70 il linguaggio trova interesse nelle applicazioni di ricerca finanziate dal DARPA che in seno ad alcune Università prestigiose quali il MIT e Carnegie-Mellon University creano su macchine a 36bit dell'epoca i primi porting di un interprete LISP curato personalmente da McCarthy.
Qui nasce la leggenda del polimorfismo del LISP; Viene creato un codice lispLisp per compilare il LISP, da una idea del team il compilatore compila l'interprete ed il compilatore stesso rendendo ancora più veolceveloce il codice esistente ed aprendo la strada ai sistemi di simulazione delle architetture dei processori. Dobbiamo comunque attendere gli anni 70 per vedere i primi progetti hardware al MIT di Lispmachine''Lisp Machine'' che faranno da motore alla economia ed al settore ricerca creando anche i primi hacker della storia ed una vasta ricaduta in aziende con molteplici specializzazioni messe a punto sulle macchine Lisp di questa epoca. Dobbiamo al LISP la nascita dei sistemi esperti, del programmi di problem solving le macchine inferenziali, il math solving, i database relazionali e gli esperimenti sul linguaggio naturale di query SQL, la tecnologia di elaborazione di immagine con software di RayTracing e le prime animazioni digitali.
Da questo progetto nasce anche la prima idea di open Source-source, la GNU fundationFoundation, idea di Richard Stallman coinvolto ai progetti lispmachineLisp Machine del MIT, che con una lispmachineLisp Machine mise a punto in LISP "Emacs", un editor molto usato, ed i primi programmi server e client per la posta elettronica.
 
Negli anni '80 si sviluppano hardware dedicati con processori stack machine specializzate nella manipolazioni di liste nella quale la memoria e l'architettura sono orientate a scelte specifiche per questo tipo di linguaggio, nascono le LispMachineLisp Machine. Alle macchine LISP sono collegate le connection machine con 65535 processori, sono connesse con hardware per l'elaborazione grafica. Si crea la prima branca di esperti in elaborazione grafica e di immagini.
Tra il 59 ed i primi anni 70 il linguaggio trova interesse nelle applicazioni di ricerca finanziate dal DARPA che in seno ad alcune Università prestigiose quali il MIT e Carnegie-Mellon University creano su macchine a 36bit dell'epoca i primi porting di un interprete LISP curato personalmente da McCarthy.
Qui nasce la leggenda del polimorfismo del LISP; Viene creato un codice lisp per compilare il LISP, da una idea del team il compilatore compila l'interprete ed il compilatore stesso rendendo ancora più veolce il codice esistente ed aprendo la strada ai sistemi di simulazione delle architetture dei processori. Dobbiamo comunque attendere gli anni 70 per vedere i primi progetti hardware al MIT di Lispmachine che faranno da motore alla economia ed al settore ricerca creando anche i primi hacker della storia ed una vasta ricaduta in aziende con molteplici specializzazioni messe a punto sulle macchine Lisp di questa epoca. Dobbiamo al LISP la nascita dei sistemi esperti, del programmi di problem solving le macchine inferenziali, il math solving, i database relazionali e gli esperimenti sul linguaggio naturale di query SQL, la tecnologia di elaborazione di immagine con software di RayTracing e le prime animazioni digitali.
Da questo progetto nasce anche la prima idea di open Source la GNU fundation, idea di Richard Stallman coinvolto ai progetti lispmachine del MIT, che con una lispmachine mise a punto in LISP "Emacs", un editor molto usato, ed i primi programmi server e client per la posta elettronica.
 
Negli anni '90 avvineavviene il declino delle macchine LISP, l'evoluzione dei processori RISC e le potenze di calcolo in continua crescita portano queste architetture ad essere soppiantate da sistemi ad alte prestazioni con processori RISC a 64bit che interpretano e compilano codice lispLisp in linguaggio macchina senza l'ausilio del supporto di un hardware dedicato. Nascono tra molti dialetti di LISP un linguaggio LISP portabile tra le piattaforme Hardware il COMMON LISP ed il CLOS come linguaggio orientato agli oggetti.
Negli anni 80 si sviluppano hardware dedicati con processori stack machine specializzate nella manipolazioni di liste nella quale la memoria e l'architettura sono orientate a scelte specifiche per questo tipo di linguaggio, nascono le LispMachine. Alle macchine LISP sono collegate le connection machine con 65535 processori, sono connesse con hardware per l'elaborazione grafica. Si crea la prima branca di esperti in elaborazione grafica e di immagini.
 
Negli anni 90 avvine il declino delle macchine LISP, l'evoluzione dei processori RISC e le potenze di calcolo in continua crescita portano queste architetture ad essere soppiantate da sistemi ad alte prestazioni con processori RISC a 64bit che interpretano e compilano codice lisp in linguaggio macchina senza l'ausilio del supporto di un hardware dedicato. Nascono tra molti dialetti di LISP un linguaggio LISP portabile tra le piattaforme Hardware il COMMON LISP ed il CLOS come linguaggio orientato agli oggetti.
 
== Per iniziare ==
Line 38 ⟶ 37:
 
Come abbiamo appena visto inserendo una lista composta da elementi separati da spazi tra 2 parentesi aperta e chiusa otteniamo l'esecuzione. Il processore LISP elabora (valuta) il comando inserito, sommando tutti termini che compongono la lista.
Avete appena scritto il vostro primo programma in LISP. Il Lisp esegue immediatamente i comandi introdotti sotto forma di liste che voi digiatedigitate attraverso il terminale.
 
La sintassi e molto semplice:
Line 61 ⟶ 60:
== Tipi dati nel Lisp ==
 
Nel lispLisp le variabili sono s-expression. Il linguaggio a differenza di tutti gli altri linguaggi interpretati o compilati non tipizza il dato. Il Lisp non assume per una variabile un tipo di dati stabile ed unico, ma consente la massima libertà di azione nell'uso delle variabili, consentendo anche cambi di tipo in corso di esecuzione del software. Questa è una proprietà che consente ad una variabile (s-expression) di creare tipi astratti ed al programmatore di trasformare variabili in codice eseguibile. Il lispLisp valuta il contenuto ed il tipo delle variabili solo quando una funzione esegue una operazione con il contenuto della S-expression.
<source lang=lisp>
> (setq test 12)
Line 82 ⟶ 81:
== Variabili nel LISP ==
 
Le variabili in lispLisp non sono tipizzate, cioè non assumono la tipologia (int, char, stringa, float, ecc...) sino a quando non vengono valutate (eval ...) dalla engine lispLisp.
Le variabili quindi assumono un significato ed un tipo solo quando il processo di EVAL le considera per l'esecuzione di una funzione.
 
Line 89 ⟶ 88:
float f1, Tarc, ...;
 
Nel lispLisp le varibilivariabili sono memorizzate nella forma di liste e verranno usate per la tipologia<br />richiesta solo quando una funzione ne prende in esame il contenuto:
<source lang=lisp> > (setq val1 10)
10
Line 100 ⟶ 99:
> (+ val1 val2)
188
> (setq val2 "la casa al mare") <--- cambio di tipo della varaibilevariabile
"la casa al mare"
> (+ val1 val2 ) <------- errore si tenta la somma di tipi diversi
Line 107 ⟶ 106:
== Numeri ==
 
Il lispLisp tratta in numeri solo quando li valuta nella funzione di''eval'' (da ''eval''uate, Evalvalutare) per il resto restano entità astratte senza un contenuto formale di tipo. Si possono mettere insieme numeri di notazione diversa ed eseguire calcoli tra di loro, si possono creare funzioni che calcolano in modo ricorsivo e presentano la soluzione. In Lisp è stato progettato Mathlab il programma più evoluto di problem solving. ilIl lispLisp per il suo polimorfismo dei tipi consente elaborazioni complesse di problemi matematici e rappresentazione grafiche dei risultati.<br />
Operazioni semplici di addizioni di una lista di elementi numerici.
<source lang=lisp> > (+ 1 4 6 7)
18</source>
Operazioni su più elementi della lista con prioritapriorità date dalle parentesi
<source lang=lisp>> (* (/ 7 6 ) (+ 4 (* 4 6)))
98/3</source>
Line 117 ⟶ 116:
<source lang=lisp> > (/ 1 2)
1/2</source>
Il meccanismo di calcolo ed il risultato sono perfettamente controllabili dal lispLisp
<source lang=lisp> > (* (/ 1 2 ) 6)</source>
 
Line 138 ⟶ 137:
Per calcolare funzioni complesse è un valido strumento interattivo adatto a trattare matrici o risolvere sistemi matematicamente complessi.
 
=== stringheStringhe ===
=== arrayArray di dati ===
=== listeListe ===
'''Introduzione''' ''da zero.''
 
Line 242 ⟶ 241:
<br />
 
== manipoliamoManipoliamo i numeri ==
== manipoliamoManipoliamo gli array ==
== manipoliamoManipoliamo le liste ==
<source lang=lisp>(0(1 2 3)(4 5)6(7 8)9)</source>
 
== Visione in Lisp ==
 
La visione artificiale è resa possibile da potenti stumentistrumenti del lispLisp a mezzo di algoritmi dedicati alla interpretazione binaria delle immagini. All'inizio si lavorava con immagini binarie composte da array bidimenionalibidimensionali di stati binari (pixel on /pixel off). Nel tempo l'evoluzione ha comportato miglioramenti nella gestione adattativa dell'immagine tali da ricavare da immagini a colori piupiù informazioni sulla tipologia di oggetti nel campo visivo. l'introduzione della vista binoculare ha inoltre consentito agli algoritmi di estrareestrarre oggetti 3D nello spazio di visione con riferimento a solidi simulati che orientassero poi sistemi decisionali di analisi del comportamento ed azione in uno spazio virtuale ricostuitoricostruito.
 
L'immagine binarybinaria può essere rappresentata da un array binario come questo
<source lang=lisp>
(camera-right '( (1 0 1 1 1 1 1 1 0 ... )
Line 263 ⟶ 262:
(1 0 1 1 1 1 1 1 0 ... ))</source>
 
Array di dimensione finite 800x600 che rappresenta la risoluzione del sistema di visione. Il linux existe un set di strumenti per convertire immagini da vari formati al formato testuale lispLisp per leggerlo ed eseguire le vostre prove( guardare sulla vostra versione linux i comandi pgmtolispm <--> lispmtopgm e formati grafici collegati a tiff, gif, png, bmp, eccc... ).
 
 
Line 310 ⟶ 309:
== Web e Lisp? ==
 
Un uso insolito e poco pubblicizzato è vedere un lispLisp come front -end CGI di un server Apache. La procedura per la realizzazione di un CGI in lispLisp è semplice e di facile test scopo di questa sezione. Per il test abbiamo usato un ottimo interprete GNU come Guile ben integrato con Apache.
 
Prerequisiti:
- Installare nel proprio server Linux Guile ( lisp interprete Lisp )
- nella Vs. directory di apache ../www/cgi-bin/..ecc... copiate il file qui sotto
 
Line 336 ⟶ 335:
Il prodotto Web per eccellenza, stabilità e per modularità di interfaccia e potenza resta comunque Allegro della Franz Inc. della quale rimando a questo sito la trattazione di una implimentazione aziendale con database e transaction manager.
 
== TCP ed il lispLisp ==
 
Lo sviluppo di internet e dei sistemi di comunicazione coinvolge anche linguaggi come il lispLisp che in potenti macro consente di conversare in client/server tra sistemi in rete.
inIn questo esempio mettiamo in campo un codice server che mette a disposizione di alcuni client nella rete delle letture rilevate da una seriale che prende il flusso dati da una testa GPS in codice ASCII leggibile NMEA.
 
Un ottimo test per vedere la semplicità della chiamate al Layer TCP/IP e per provare la stabilità di questo codice che trasmette indisturbato all'infinito.