Qualche giorno fa, mentre aggiornavo il mio (magro) curriculum, ho preso una decisione drastica: alla voce sui linguaggi di programmazione conosciuti ho eliminato Pascal e Modula-2 (in effetti sarà un decennio che non scrivo una riga di codice in questi due linguaggi) e ho inserito “Lisp (Scheme)”. Questo sì che è un cambio di paradigma.
Per inciso, suggerisco agli aspiranti logici in ascolto (in particolare a uno) di considerare attentamente l’idea di imparare a programmare in Scheme (o in qualche altro linguaggio funzionale come ML o Haskell), perché potrebbe essere un investimento molto redditizio. Per fare un solo esempio, in Scheme è immediato definire i numerali di Church:
(define zero (lambda (f) (lambda (x) x))) (define (succ n) (lambda (f) (lambda (x) (f ((n f) x)))))
in maniera preoccupantemente simile alle corrispondenti formule del lambda-calcolo (a parte il proliferare di parentesi tipico del Lisp):
0 ≡ λf.λx.x
succ ≡ λn.λf.λx. f (n f x)
ma con il vantaggio che zero
e succ
sono ora procedure a tutti gli effetti, che si possono eseguire (o meglio applicare) per vederne concretamente i risultati; il che, soprattutto nella fase di apprendimento, mi sembra un discreto aiuto.
Alberto, pendo dalle tue labbra!
Sto studiando proprio in questo momento il lambda calcolo (una sua variante per apprendisti, per la verita`)…