-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Il 11/12/2011 19:39, Carlos Catucci ha scritto: > Scusa, ma di cosa vi scandalizzate? > > Anche Common Lisp lo permette, almeno 10 anni prima di PHP: > > $clisp -q -norc > [1]> (setf (fdefinition 'read-string) (get-macro-character #\")) > #<SYSTEM-FUNCTION SYSTEM::STRING-READER> > [2]> > (set-macro-character #\" > #'(lambda (stream char) > (let* ((buf (read-string stream char)) > (n (parse-integer buf :junk-allowed t))) > n))) > T > [3]> (+ "3viso" 2) > 5 > > > Guarda ti credo sulla parola, non ho voglia di tirare fuori la stele di > rosetta per tradurre :) >
Quello che fa quel codice (in particolare la funzione set-macro-character) è modificare il modo in cui Common Lisp legge una stringa (intesa come sequenza di caratteri delimitati da virgolette). Invece di restituire un oggetto stringa, converte la stringa in intero, restituendo nil se non è possibile. Con una piccola modifica è possibile fargli restituire 0, al posto di nil. Ovviamente è ben diverso da quello che fa PHP, che converte una stringa in numero solo quando viene passata come parametro ad un operatore che opera su numeri (se ho capito bene). "Purtroppo" in Common Lisp l'operatore + non è generico, e non è quindi possibile specializzarlo quando uno degli operandi è una stringa e l'altro un numero (CLOS, il sistema ad oggetti di Common Lisp supporta i multimetodi [1]). [1] http://en.wikipedia.org/wiki/CLOS http://en.wikipedia.org/wiki/Multiple_dispatch Ciao Manlio -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.10 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEYEARECAAYFAk7lFSsACgkQscQJ24LbaUTuOACghVSTCtohvDorVy2HU+ZxyckX wxQAn3EufaR/iIsPtjz1oM67hByy6US6 =qIVM -----END PGP SIGNATURE----- _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python