parent
6ea9c0fc02
commit
eaed0db99a
|
@ -15,6 +15,8 @@ M: fixnum >fixnum ; inline
|
||||||
M: fixnum >bignum fixnum>bignum ; inline
|
M: fixnum >bignum fixnum>bignum ; inline
|
||||||
M: fixnum >integer ; inline
|
M: fixnum >integer ; inline
|
||||||
M: fixnum >float fixnum>float ; inline
|
M: fixnum >float fixnum>float ; inline
|
||||||
|
M: fixnum integer>fixnum ; inline
|
||||||
|
M: fixnum integer>fixnum-strict ; inline
|
||||||
|
|
||||||
M: fixnum hashcode* nip ; inline
|
M: fixnum hashcode* nip ; inline
|
||||||
M: fixnum equal? over bignum? [ >bignum bignum= ] [ 2drop f ] if ; inline
|
M: fixnum equal? over bignum? [ >bignum bignum= ] [ 2drop f ] if ; inline
|
||||||
|
@ -61,6 +63,11 @@ M: fixnum (log2) fixnum-log2 ; inline
|
||||||
|
|
||||||
M: bignum >fixnum bignum>fixnum ; inline
|
M: bignum >fixnum bignum>fixnum ; inline
|
||||||
M: bignum >bignum ; inline
|
M: bignum >bignum ; inline
|
||||||
|
M: bignum integer>fixnum bignum>fixnum ; inline
|
||||||
|
|
||||||
|
M: bignum integer>fixnum-strict
|
||||||
|
dup bignum>fixnum
|
||||||
|
2dup number= [ nip ] [ drop out-of-fixnum-range ] if ; inline
|
||||||
|
|
||||||
M: bignum hashcode* nip bignum>fixnum ;
|
M: bignum hashcode* nip bignum>fixnum ;
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,8 @@ GENERIC: >fixnum ( x -- n ) foldable
|
||||||
GENERIC: >bignum ( x -- n ) foldable
|
GENERIC: >bignum ( x -- n ) foldable
|
||||||
GENERIC: >integer ( x -- n ) foldable
|
GENERIC: >integer ( x -- n ) foldable
|
||||||
GENERIC: >float ( x -- y ) foldable
|
GENERIC: >float ( x -- y ) foldable
|
||||||
|
GENERIC: integer>fixnum ( x -- y ) foldable
|
||||||
|
GENERIC: integer>fixnum-strict ( x -- y ) foldable
|
||||||
|
|
||||||
GENERIC: numerator ( a/b -- a )
|
GENERIC: numerator ( a/b -- a )
|
||||||
GENERIC: denominator ( a/b -- b )
|
GENERIC: denominator ( a/b -- b )
|
||||||
|
@ -56,8 +58,6 @@ GENERIC: (log2) ( x -- n ) foldable
|
||||||
|
|
||||||
PRIVATE>
|
PRIVATE>
|
||||||
|
|
||||||
ERROR: not-an-integer n ;
|
|
||||||
|
|
||||||
ERROR: out-of-fixnum-range n ;
|
ERROR: out-of-fixnum-range n ;
|
||||||
|
|
||||||
ERROR: log2-expects-positive x ;
|
ERROR: log2-expects-positive x ;
|
||||||
|
@ -87,19 +87,6 @@ GENERIC: neg? ( x -- -x )
|
||||||
|
|
||||||
UNION: integer fixnum bignum ;
|
UNION: integer fixnum bignum ;
|
||||||
|
|
||||||
: integer>fixnum ( m -- n )
|
|
||||||
dup fixnum? [
|
|
||||||
dup bignum? [ bignum>fixnum ] [ not-an-integer ] if
|
|
||||||
] unless ; inline foldable
|
|
||||||
|
|
||||||
: integer>fixnum-strict ( m -- n )
|
|
||||||
dup fixnum? [
|
|
||||||
dup bignum? [
|
|
||||||
dup bignum>fixnum 2dup number=
|
|
||||||
[ nip ] [ drop out-of-fixnum-range ] if
|
|
||||||
] [ not-an-integer ] if
|
|
||||||
] unless ; inline foldable
|
|
||||||
|
|
||||||
TUPLE: ratio { numerator integer read-only } { denominator integer read-only } ;
|
TUPLE: ratio { numerator integer read-only } { denominator integer read-only } ;
|
||||||
|
|
||||||
UNION: rational integer ratio ;
|
UNION: rational integer ratio ;
|
||||||
|
|
Loading…
Reference in New Issue