Waldek Hebisch <[EMAIL PROTECTED]> writes:

> Martin Rubey wrote:
> > I just was with Franz Lehner, who run into 
> > 
> >     >> System error:
> >     The value 1152921504606846975 is not of type (SIGNED-BYTE 32).
> > 
> > when trying to use aldor-combinat with 64 bit sbcl.  Modifying
> > 
> > - (deftype |SInt| () '(integer #.(- (expt 2 31)) #.(1- (expt 2 31))))
> > + (deftype |SInt| () '(integer #.(- (expt 2 63)) #.(1- (expt 2 63))))
> > 
> > made the problem go away. I think this suggests that aldor's hash algorithm
> > uses different hash sizes depending on the number of bits available.
> >
> 
> 1152921504606846975 is exactly MOST-POSITIVE-FIXNUM.  I do not think
> it came from hash, rather somewhere there is explicit MOST-POSITIVE-FIXNUM.
> In fact, in trunk we have:
> 
> (defmacro |SIntMax|       () `(the |SInt| most-positive-fixnum))
> 
> in foam_l.lisp -- it seems that your patch does not include change
> to this line.

Oh, good catch!

Franz, could you try?

> > BTW, there was another bug in declare-prog.  It really should read
> > 
> > +;; name-result is a list, the car is the name of the function to be 
> > declared,
> > +;; the cdr is the list of return values
> > +;; params is a list of pairs, the car of each is the name of the argument, 
> > the
> > +;; cdr is its type.
> > +
> > +;; in the ANSI Common Lisp ftype function declaration, the names of the
> > +;; arguments do not appear, actually.  In GCL, they did.  
> > +
> > +;; Example:
> > +;; (declare-prog
> > +;;  (|C25-csspecies-generBaseFn| |Clos| |Clos| |Clos| |Clos|)
> > +;;  ((|e1| |Env|)))
> >  (defmacro declare-prog (name-result params)
> > -  `(proclaim '(function ,(car name-result) ,params ,@(cdr name-result))))
> > +  `(proclaim '(ftype (function
> > +                     ,(mapcar #'cadr params)
> > +                     (values ,@(cdr name-result)))
> > +                    ,(car name-result))))
> > 
> > 
> > 
> > Doesn't seem to have much effect, though.
> > 
> 
> IIRC GCL allows ommiting the type of function, while Commom Lisp
> spec reqires it.  The line
> 
>                     ,(or (cadr name-result) 't))
> 
> was intended to archive the same effect as in GCL -- if there is
> no type than (cdr name-result) is NIL, (car NIL) is again NIL,
> so or picks T -- in other words missing type should default to T.

Yes, but there are examples of code generated by aldor, eg.

> > +;; (declare-prog
> > +;;  (|C25-csspecies-generBaseFn| |Clos| |Clos| |Clos| |Clos|)
> > +;;  ((|e1| |Env|)))

where we actually have multiple values!  I believe that 

(values ,@(cdr name-result))

is "more" correct, don't you think?

Martin


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"FriCAS - computer algebra system" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/fricas-devel?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to