[armedbear-devel] BigNum question

Alan Ruttenberg alanruttenberg at gmail.com
Tue Oct 9 19:36:00 UTC 2012


On Tue, Oct 9, 2012 at 2:34 PM, archisman rudra <archi.rudra at gmail.com>wrote:

> Is this correct behavior?
>
> CL-USER(17): (type-of 1234567898723618080928927362387)
> (INTEGER 2147483648)
>
>
>
> The relevant java code is in Bignum.java: (the value field is a java
> BigInteger)
>
>   @Override
>   public LispObject typeOf()
>   {
>     if (value.signum() > 0)
>       return list(Symbol.INTEGER,
>                    new Bignum((long)Integer.MAX_VALUE + 1));
>     return Symbol.BIGNUM;
>   }
>
>
>
> for comparison:
> CL-USER(23): (type-of -1234567898723618080928927362387)
> BIGNUM
>
>
> which makes intuitive sense.
>
http://www.lispworks.com/documentation/lw51/CLHS/Body/f_tp_of.htm

*Relevant bits of type-of description:*

Returns a *type
specifier*<http://www.lispworks.com/documentation/lw51/CLHS/Body/26_glo_t.htm#type_specifier>
, *typespec*, for a
*type*<http://www.lispworks.com/documentation/lw51/CLHS/Body/26_glo_t.htm#type>
that
has the *object* as an
*element*<http://www.lispworks.com/documentation/lw51/CLHS/Body/26_glo_e.htm#element>.
The *typespec* satisfies the following:

1. For any *object* that is an
*element*<http://www.lispworks.com/documentation/lw51/CLHS/Body/26_glo_e.htm#element>
of
some *built-in type*<http://www.lispworks.com/documentation/lw51/CLHS/Body/26_glo_b.htm#built-in_type>
:

a. the *type*<http://www.lispworks.com/documentation/lw51/CLHS/Body/26_glo_t.htm#type>
returned
is a *recognizable
subtype*<http://www.lispworks.com/documentation/lw51/CLHS/Body/26_glo_r.htm#recognizable_subtype>
of
that *built-in type*<http://www.lispworks.com/documentation/lw51/CLHS/Body/26_glo_b.htm#built-in_type>
.

b. the *type*<http://www.lispworks.com/documentation/lw51/CLHS/Body/26_glo_t.htm#type>
returned
does not involve and, eql, member, not, or, satisfies, or values.

3. The *type*<http://www.lispworks.com/documentation/lw51/CLHS/Body/26_glo_t.htm#type>
returned
by *type-of*<http://www.lispworks.com/documentation/lw51/CLHS/Body/f_tp_of.htm#type-of>
is
always a *recognizable
subtype*<http://www.lispworks.com/documentation/lw51/CLHS/Body/26_glo_r.htm#recognizable_subtype>
of
the *class*<http://www.lispworks.com/documentation/lw51/CLHS/Body/26_glo_c.htm#class>
returned
by *class-of*<http://www.lispworks.com/documentation/lw51/CLHS/Body/f_clas_1.htm#class-of>.
That is,

 (subtypep (type-of object) (class-of object)) =>  true
<http://www.lispworks.com/documentation/lw51/CLHS/Body/26_glo_t.htm#true>,
true <http://www.lispworks.com/documentation/lw51/CLHS/Body/26_glo_t.htm#true>


So my read is that there's no guarantee of literal repeatability between
the returned values of type-of even in subsequent calls, never mind between
implementations.

-Alan



>
>
>
>
>
> _______________________________________________
> armedbear-devel mailing list
> armedbear-devel at common-lisp.net
> http://lists.common-lisp.net/cgi-bin/mailman/listinfo/armedbear-devel
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.common-lisp.net/pipermail/armedbear-devel/attachments/20121009/59f11683/attachment.html>


More information about the armedbear-devel mailing list