giovedì 19 settembre 2013

Lisp


Avvertimento
: è ultra semplificato, solo per rendere l'idea, senza tradire lo spirito della cosa. Poi chi vuole approfondisce e vede le parti noiose che ho tagliato.

Adesso vi racconto di una cosa che faccio spesso con il computer. Ed è una di quelle che faccio perché sono vecchio e si possono fare solo con il computer vero, non con tablet, smartphone e quelle robe lì che usate voi adesso.
È una cosa molto vecchia, ecco la storia.

L'idea meravigliosa riguardo al computer è che questo non è costruito per un compito specifico, anzi è una macchina universale.
E fa quello che gli dici. O meglio quello che riesci a dirgli.
Il problema è proprio questo: dirglielo. Inizialmente si era pensato a interruttori, pulsanti e cose simili, poi a codifiche come quelle dei matematici ma infine si è arrivati a copiare la tastiera della macchina per scrivere.
Ma anche lì si usava un insieme (visto che non ho detto set?) di istruzioni molto primitive, tipo

metti questo numero nel registro (cella) AX
prendi quest'altro
fai la somma con quello in AX
dimmi cosa c'è in RX
(sappiamo che il risultato lo mette sempre lì)


e così via, l'Assembler.
Poi John disse: "Ma se gli insegnassimo un linguaggio simile a come i matematici trattano le loro formule, per dire:

I = 8
J = 12
K = I + J
PRINT K


non sarebbe più facile?".
"Sai che è un'idea, dai facciamolo", rispose il signor IBM e in men che non si dica (non tanto immediatamente in realtà) ecco il Fortran.

"State facendo tutto sbagliato!" disse John (un altro, non quello di prima, quello che adesso chiameremo JMC).

Io ho passato anni con il Fortran, quello del primo John, chiamiamolo JB, ma l'idea di JMC mi ha sempre affascinato, tanto che provo a raccontarvela.

Con il Fortran dobbiamo esaminare le istruzioni per tokenizzarle (ahemm) in numeri e operatori. Non sarebbe più semplice se questo potesse essere automatico? Se io scrivessi:

(+ 8 12)

Sarebbe immediatamente evidente che l'operatore è il primo elemento della lista, chiamiamolo CAR e gli altri sono i dati da applicare a questo operatore. E il metodo sarebbe anche più generale, nulla vieta di scrivere:

(+ 8 12 4)

E il risultato sarebbe restituito dalla valutazione della lista.
Ah! posso avere liste dentro la lista, basta che comincio la valutazione da quelle nestificate (annidate JMC, si dice annidate).
Cioè parto con

(+ (+ 3 5) (+ 2 6 4) (- 7 3))

e calcolando le tre liste interne ritorno a quelle di prima.

"Ma dici che potrebbe funzionare questa roba?" chiese il signor IBM che aveva visto che bighellonare tra quelli poteva tornare utile.
"Guarda qui", dissero Steve, Timothy e Mike, della squadra di JMC.


"Roba da matt!" disse il signor IBM, "lo compro, finitelo, subito! Parlo io con il preside" perché quelli avrebbero dovuto insegnare la matematica a scuola.
"Roba da matt!" disse JB che insegnava nella stessa scuola, "Non funzionerà mai!".

Ecco, non so se ho reso l'idea. Continuo?

Nessun commento:

Posta un commento