[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Scheme-reports] [r6rs-discuss] Scheme pattern matching: the case for (case)
Peter Kourzanov scripsit:
> (define eqv? equal?)
> (write (case "asd" (("asd") #t)))
> You'll find Tinyscheme, Minischeme, MIT, Scheme48/SCSH
> included in your list. Ypsilon and Stalin exhibit this
> behaviour for strings, but not for more structured data
> like vectors.
Chicken, Bigloo, Kawa, SISC, Chibi, STklos, and Scheme 9 also have this
problem; Racket, Gauche, Gambit, Guile, Chez, SCM, Larceny, Mosh, and
SSCM do not; Ikarus won't let you rebind EQV?.
However, this is a problem not of hygiene but of reusing implementation,
I think. Consider this:
(define cdr #f)
(length '(a b c))
I haven't found any Schemes except Scheme 9 on which this fails, but
there is nothing in any Scheme standard to make it work. In C, on the
other hand, the equivalent construction is not allowed to fail: fopen()
is naturally definable in terms of open(), but if you define your own open(),
it cannot affect the behavior of fopen() on conformant ISO C systems.
On the gripping hand, if you define your own length in terms of cdr
(as is natural), you will get a failure if cdr is redefined later in the
The problem's a mess.
John Cowan cowan@x http://www.ccil.org/~cowan
Most people are much more ignorant about language than they are about
[other subjects], but they reckon that because they can talk and read and
write, their opinions about talking and reading and writing are as well
informed as anybody's. And since I have DNA, I'm entitled to carry on at
length about genetics without bothering to learn anything about it. Not.
Scheme-reports mailing list