12 June 2009

Scheme

Scheme (λ) e' un dialetto di lisp, il noto linguaggio con cui Dio ha scritto l'universo.
Sto leggendo Structure and Interpretation of Computer Programs che usa Scheme come suo linguaggio, pertanto sto imparando scheme, pian piano.

Il libro, che dovrebbe essere una introduzione alla programmazione, e' interessante. Anche se purtroppo, per ora, non mi ha insegnato nulla di nuovo a parte Scheme in se' e a parte qualche metodo di calcolo matematico.

Non posso ancora sbandierare in giro la grandezza del libro, quindi non ve lo sto consigliando... Ma se non conoscete lisp, nelle sue varie forme, vi consiglio di studiarlo.

Non solo perche' trovo la programmazione funzionale (e in particolare le ricorsioni) abbastanza divertenti, ma anche perche' il linguaggio in se' e molto potente e semplice. A dirla tutta, di questo passo, scopriro' che Squared e' totalmente inutile.
Pero', per ora, Squared ha dei punti che Scheme esclude totalmente, o li rielabora secondo altri punti di vista... Quindi, a meno di rivoluzioni inaspettate - che reputo improbabili - Squared si fa.

Anche perche', nella sua grandezza, continuo a non amare alcune cose di lisp.
Ad esempio, anche se trovo grandioso l'uso delle liste per rappresentare *tutto*, non mi piace il fatto che la sintassi sia in certo modo vincolato a questo fatto.

Inoltre, trovo le special forms abbastanza pericolose (per quanto utili), perche' suonano tanto come "patch" ad una sintassi semplice che e' stata forzata.
Per chi non lo sapesse, esse sono piccoli strappi alla regola della sintassi di lisp. Il problema e' che non hai modo di capirlo ad occhio, quindi il comportamento non e' proprio trasparente.

Benche' Scheme sia abbastanza pulito e semplice (e quindi facile da imparare), trovo che non sia completamente trasparente: ci sono cose che se non sai, danno risultati scorretti benche' la semantica di base risulti corretta. Ad esempio, il metodo con cui vengono chiamate le funzioni, puo' portare a side-effects spiacevoli.

Questo difetto e' proprio anche del C e del C++, tra l'altro.

In ogni caso, e' stupendo osservare come 3 anni fa, quando venni introdotto ai linguaggi funzionali, li trovai "marginalmente interessanti", mentre adesso, dopo essermi sparato la complessita' Cipiu'piu'esca, li trovi necessari per una corretta formazione di un buon programmatore.

Ah, dimenticavo: i funtori di C++ non sono neanche lontanamente paragonabili alla hi-order functions di lisp :) Sono troppo fighe.

(E il libro non ha ancora parlato di liste!! XD)

Stay --sync

1 commenti:

Scardax said...

Io é un sacco che voglio imparare il LISP... Ho fatto un esame di Programmazione Funzionale ma con un altro linguaggio, l'Ocaml, ora appena finiscono gli esami mi ci metto!

Post a Comment