[gambit-list] Any way to reach generic + etc. from code with (declare (fixnum))

Mikael mikael.rcv at gmail.com
Thu Nov 14 15:53:23 EST 2013


2013/11/4 Marc Feeley <feeley at iro.umontreal.ca>

>
> On Nov 3, 2013, at 10:01 PM, Mikael <mikael.rcv at gmail.com> wrote:
>
> > Dear Marc,
> >
> > The procedure ordinarily reached as + , can it be reached under some
> alternative name in code with (declare (fixnum)) ?
>
> Here's how I would do it:
>
> (declare (standard-bindings) (fixnum) (not safe))
>
> (define (double1 x)
>   (+  ;; uses fixnum specific + (i.e. ##fx+)
>    x
>    x))
>
> (define (double2 x)
>   ((let () (declare (generic)) +)  ;; uses generic +
>    x
>    x))
>
> You could also call the procedure ##+, but it is not an exact replacement
> for + because the error handling is different (try (##+ 1 'foo)) and it
> must be passed 2 parameters.
>
> Marc
>
>
Weird, I tried for this x.scm :

(declare (standard-bindings) (fixnum))
(define x 97650736685728012900)

((let () (declare (generic)) +)
 x
 1)



and it still goes:

$ gsc
Gambit v4.7.0

> (load "x.scm")
"x.scm"
> ,q
$ gsc
Gambit v4.7.0

> (compile-file "x.scm")
"x.o1"
> (load "x.o1")
*** ERROR IN ##load -- (Argument 1) FIXNUM expected
(fx+ 97650736685728012900 1)
1>

I get the same result when compiling the double2 example in your email
above.

I tried adding another let around the +, did not resolve it.

How fix?

Thanks,
Mikael
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.iro.umontreal.ca/pipermail/gambit-list/attachments/20131114/b73a03ed/attachment.htm>


More information about the Gambit-list mailing list