Ancora Lisp

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.

common_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.