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 [1]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.
Note
↑1 | n f) x |
---|
Alberto, pendo dalle tue labbra!
Sto studiando proprio in questo momento il lambda calcolo (una sua variante per apprendisti, per la verita`)…