Andy Wingo <wi...@pobox.com> writes:
> I did apply it, but it made the test cases start to fail, because
> numbers.test is loaded after ecmascript.test, and:
>
>     scheme@(guile-user)> ,L ecmascript
>     Happy hacking with ECMAScript!  To switch back, type `,L scheme'.
>     ecmascript@(guile-user)> true * true;
>     $1 = 1
>     ecmascript@(guile-user)> ,L scheme
>     Happy hacking with Scheme!  To switch back, type `,L ecmascript'.
>     scheme@(guile-user)> (* #t #t)
>     $2 = 1

Oh, I see.  Your implementation of ecmascript extends `*' to work on
booleans, is that right?  If so, then I think it naturally follows that
(expt <bool> K) should also work.

If there were a test case in numbers.test to verify that (* #t #t)
throws an exception (a test no less reasonable than (expt #t 2)), then
ecmascript would break that too, even without my recent patch.

I think it would be okay to simply remove the (expt #t 2) and
(integer-expt #t 2) tests.

> I think that's the thing, anyway.  It just sounds really squirrelly.
> Could you not extend `expt' or `integer-expt' instead?

In a sense there is no need to extend any of the arithmetic operators.
We could just force people to make their own operators like `g+', `g*',
etc.

The advantage of being able to extend the normal operators is that
existing code that uses `+', `*', `expt', etc, can work with any new
data type you later add.  It allows the whole system to be extensible.
I think that's a huge win.

     Mark

Reply via email to