In questo blog ho parlato di Lisp in un paio di occasioni.
La prima, nel maggio 2015, con il post dal titolo “Lisp sempreverde”, nel quale ho presentato una versione abbastanza recente del Lisp, Newlisp, in maniera molto sommaria.
A questa superficialità ho cercato di rimediare nell’ottobre 2019 con il post dal titolo “Newlisp”, con allegato un manualetto in cui si spiega meglio questa bellissima e facile versione del Lisp, che rende meno faticoso avvalersi di uno dei più vecchi e originali linguaggi di programmazione.
Visto che si tratta del linguaggio che, concepito per l’intelligenza artificiale, ancora non ha rivali degni di nota in questo campo sempre più in fermento, sento il dovere di proporre nel manualetto allegato una descrizione del funzionamento di una delle più diffuse e utilizzate versioni del Lisp, il Common Lisp, che è il più legittimato erede del Lisp originario.
Come sempre il manualetto è liberamente scaricabile, stampabile e distribuibile.
Tag: lisp
Lisp sempreverde
Il linguaggio Lisp è stato creato nel lontano 1959 da John McCarthy presso il Massachusetts Institute of Technology per i computer della serie IBM 700/7000 e per applicazioni di intelligenza artificiale.
E’ nato come linguaggio funzionale ed è il più antico linguaggio di questo tipo. Ma dal 1959 ad oggi è passato attraverso varie evoluzioni e sono stati creati numerosi suoi dialetti, al punto che le varie versioni che sono oggi disponibili non si possono catalogare come linguaggi funzionali puri.
Tra queste varie versioni, che vanno dal Common Lisp all’AutoLISP (utilizzato in AutoCAD), dallo Scheme all’Emacs Lisp, ne segnalo una che ritengo notevole per la semplicità di uso e per la ricchezza di funzioni preconfezionate che offre: newlisp.
Sul sito www.newlisp.org troviamo tutto ciò che lo riguarda: documentazione e possibilità di download. Il tutto all’insegna del software libero.
Creato nel 1991 per Windows fu convertito per Linux nel 1999 e, di rilascio in rilascio, si è sempre più arricchito: il 20 gennaio 2015 è stata rilasciata la versione 10.6.2, disponibile per Linux, Windows e OS X.
Lo ritengo un formidabile linguaggio di scripting per studenti e matematici.
Una volta che ci si è abituati all’uso delle numerose parentesi e alla notazione prefissa tipiche del Lisp diventa anche rapido e divertente.
Utili funzioni preconfezionate sono le seguenti.
Calcolo matriciale:
• invert ritorna l’inversione di una matrice
• det calcola il determinante di una matrice
• multiply moltiplica due matrici
• mat applica un operatore aritmetico a due matrici o a una matrice e a un numero
• transpose ritorna la trasposta di una matrice
Calcoli statistici:
• beta calcola la funzione beta
• betai calcola la funzione beta incompleta
• binomial calcola la funzione binomiale
• corr calcola il coefficiente di correlazione di Pearson
• crit-chi2 calcola il valore del Chi quadrato di Pearson per una data probabilità
• crit-f calcola il valore critico minimo del test F di Snedecor per una data probabilità
• crit-t calcola il valore critico minimo del test t di Student per un dato livello di confidenza
• crit-z calcola il valore critico normale di un test Z di Fisher per una data probabilità cumulata
• erf calcola la funzione di errore per un numero
• gammai calcola la funzione gamma incompleta
• gammaln calcola la logaritmica della funzione gamma
• kmeans-query calcola la distanza euclidea tra un vettore e un centroide
• kmeans-train applica la cluster analysis a una matrice
• normal genera una lista di numeri casuali normalmente distribuiti data una media e uno scarto quadratico medio
• prob-chi2 calcola la probabilità cumulata del test Chi quadrato di Pearson
• prob-f calcola la probabilità di un valore riscontrato del test F di Snedecor
• prob-t calcola la probabilità di un valore riscontrato del test T di Student
• prob-z calcola la probabilità cumulata di un valore riscontrato del test Z di Fisher
• stats calcola valori statistici (media, varianza, scarto quadratico medio, ecc.) di una serie di numeri
• t-test utilizza il test t di Student per valutare la differenza tra medie
Calcoli finanziari:
• fv calcola il valore futuro di un investimento
• irr calcola il tasso di rendimento interno
• nper calcola il numero di periodi per un investimento
• npv calcola il valore attuale di un investimento
• pmt calcola la rata costante per estinguere un prestito
• pv calcola il valore attuale di una rendita
Ovviamente quelle che ho richiamato sono comprese nella lunghissima serie di funzioni che ci offre newlisp e le ho richiamate in quanto sono difficilmente presenti in altre versioni del linguaggio Lisp.
La lista completa e la sintassi richiesta per tutte le funzioni la troviamo in http://www.newlisp.org/downloads/manual_frame.html.
Altra cosa utile e sfiziosa che ci regala newlisp è la possibilità di creare ed eseguire programmi con interfaccia grafica (GUI), grazie all’aggiunta a newlisp, attorno al 2008, di un server per interfaccia grafica costituito dai file guiserver.jar (per far funzionare il quale occorre aver installato la macchina virtuale java sul computer) e dalla sua interfaccia guiserver.lsp.
La sintassi per programmare con GUI la troviamo all’indirizzo http://www.newlisp.org/guiserver-jp/.
Un piccolo esempio di programma con interfaccia grafica è scaricabile qui.
Un esempio un tantino meno banale lo troviamo invece qui: questo programma è utile per determinare i codici da inserire nella programmazione con GUI per creare i colori desiderati.
Ricordo a chi usa Linux che i file eventualmente scaricati vanno resi eseguibili per provarli.
Buon divertimento con newlisp.