[Python] [OT]: PHP critique [ERA] Re: Python e html

Manlio Perillo manlio.perillo a gmail.com
Dom 11 Dic 2011 21:40:11 CET


-----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-----


Maggiori informazioni sulla lista Python