mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-01 12:20:26 +02:00
* scheme-data.texi (Integers): Added docs for the new scm_is_,
scm_to_ and scm_from_ functions for integers.
This commit is contained in:
parent
e63a059cce
commit
4e2b1f342d
1 changed files with 121 additions and 2 deletions
|
@ -304,8 +304,17 @@ The infinities @samp{+inf.0} and @samp{-inf.0} are considered to be
|
||||||
inexact integers. They are explained in detail in the next section,
|
inexact integers. They are explained in detail in the next section,
|
||||||
together with reals and rationals.
|
together with reals and rationals.
|
||||||
|
|
||||||
@c REFFIXME Maybe point here to discussion of handling immediates/bignums
|
C has a host of different integer types, and Guile offers a host of
|
||||||
@c on the C level, where the conversion is not so automatic - NJ
|
functions to convert between them and the @code{SCM} representation.
|
||||||
|
For example, a C @code{int} can be handled with @code{scm_to_int} and
|
||||||
|
@code{scm_from_int}. Guile also defines a few C integer types of its
|
||||||
|
own, to help with differences between systems.
|
||||||
|
|
||||||
|
C integer types that are not covered can be
|
||||||
|
handled with the generic @code{scm_to_signed_integer} and
|
||||||
|
@code{scm_from_signed_integer} for signed types, or with
|
||||||
|
@code{scm_to_unsigned_integer} and @code{scm_from_unsigned_integer}
|
||||||
|
for unsigned types.
|
||||||
|
|
||||||
@deffn {Scheme Procedure} integer? x
|
@deffn {Scheme Procedure} integer? x
|
||||||
@deffnx {C Function} scm_integer_p (x)
|
@deffnx {C Function} scm_integer_p (x)
|
||||||
|
@ -323,6 +332,116 @@ Return @code{#t} if @var{x} is an integer number, else @code{#f}.
|
||||||
@end lisp
|
@end lisp
|
||||||
@end deffn
|
@end deffn
|
||||||
|
|
||||||
|
@deftypefn {C Function} int scm_is_integer (SCM x)
|
||||||
|
This is equivalent to @code{scm_is_true (scm_integer_p (x))}.
|
||||||
|
@end deftypefn
|
||||||
|
|
||||||
|
@defvr {C Type} scm_t_int8
|
||||||
|
@defvrx {C Type} scm_t_uint8
|
||||||
|
@defvrx {C Type} scm_t_int16
|
||||||
|
@defvrx {C Type} scm_t_uint16
|
||||||
|
@defvrx {C Type} scm_t_int32
|
||||||
|
@defvrx {C Type} scm_t_uint32
|
||||||
|
@defvrx {C Type} scm_t_int64
|
||||||
|
@defvrx {C Type} scm_t_uint64
|
||||||
|
@defvrx {C Type} scm_t_intmax
|
||||||
|
@defvrx {C Type} scm_t_uintmax
|
||||||
|
The C types are equivalent to the corresponding ISO C types but are
|
||||||
|
defined on all platforms, with the exception of @code{scm_t_int64} and
|
||||||
|
@code{scm_t_uint64}, which are only defined when a 64-bit type is
|
||||||
|
available. For example, @code{scm_t_int8} is equivalent to
|
||||||
|
@code{int8_t}.
|
||||||
|
|
||||||
|
You can regard these definitions as a stop-gap measure until all
|
||||||
|
platforms provide these types. If you know that all the platforms
|
||||||
|
that you are interested in already provide these types, it is better
|
||||||
|
to use them directly instead of the types provided by Guile.
|
||||||
|
@end defvr
|
||||||
|
|
||||||
|
@deftypefn {C Function} int scm_is_signed_integer (SCM x, scm_t_intmax min, scm_t_intmax max)
|
||||||
|
@deftypefnx {C Function} int scm_is_unsigned_integer (SCM x, scm_t_uintmax min, scm_t_uintmax max)
|
||||||
|
Return @code{1} when @var{x} represents an integer that is between
|
||||||
|
@var{min} and @var{max}, inclusive.
|
||||||
|
|
||||||
|
These functions can be used to check whether a @code{SCM} value will
|
||||||
|
fit into a given range, such as the range of a given C integer type.
|
||||||
|
If you just want to convert a @code{SCM} value to a given C integer
|
||||||
|
type, use one of the conversion functions directly.
|
||||||
|
@end deftypefn
|
||||||
|
|
||||||
|
@deftypefn {C Function} scm_t_intmax scm_to_signed_integer (SCM x, scm_t_intmax min, scm_t_intmax max)
|
||||||
|
@deftypefnx {C Function} scm_t_uintmax scm_to_unsigned_integer (SCM x, scm_t_uintmax min, scm_t_uintmax max)
|
||||||
|
When @var{x} represents an integer that is between @var{min} and
|
||||||
|
@var{max} inclusive, return that integer. Else signal an error,
|
||||||
|
either a `wrong-type' error when @var{x} is not an integer, or an
|
||||||
|
`out-of-range' error when it doesn't fit the given range.
|
||||||
|
@end deftypefn
|
||||||
|
|
||||||
|
@deftypefn {C Function} SCM scm_from_signed_integer (scm_t_intmax x)
|
||||||
|
@deftypefnx {C Function} SCM scm_from_unsigned_integer (scm_t_uintmax x)
|
||||||
|
Return the @code{SCM} value that represents the integer @var{x}.
|
||||||
|
This function will always succeed.
|
||||||
|
@end deftypefn
|
||||||
|
|
||||||
|
@deftypefn {C Function} char scm_to_char (SCM x)
|
||||||
|
@deftypefnx {C Function} {signed char} scm_to_schar (SCM x)
|
||||||
|
@deftypefnx {C Function} {unsigned char} scm_to_uchar (SCM x)
|
||||||
|
@deftypefnx {C Function} short scm_to_short (SCM x)
|
||||||
|
@deftypefnx {C Function} {unsigned short} scm_to_ushort (SCM x)
|
||||||
|
@deftypefnx {C Function} int scm_to_int (SCM x)
|
||||||
|
@deftypefnx {C Function} {unsigned int} scm_to_uint (SCM x)
|
||||||
|
@deftypefnx {C Function} long scm_to_long (SCM x)
|
||||||
|
@deftypefnx {C Function} {unsigned long} scm_to_ulong (SCM x)
|
||||||
|
@deftypefnx {C Function} long long scm_to_long_long (SCM x)
|
||||||
|
@deftypefnx {C Function} {unsigned long long} scm_to_ulong_long (SCM x)
|
||||||
|
@deftypefnx {C Function} size_t scm_to_size_t (SCM x)
|
||||||
|
@deftypefnx {C Function} ssize_t scm_to_ssize_t (SCM x)
|
||||||
|
@deftypefnx {C Function} scm_t_int8 scm_to_int8 (SCM x)
|
||||||
|
@deftypefnx {C Function} scm_t_uint8 scm_to_uint8 (SCM x)
|
||||||
|
@deftypefnx {C Function} scm_t_int16 scm_to_int16 (SCM x)
|
||||||
|
@deftypefnx {C Function} scm_t_uint16 scm_to_uint16 (SCM x)
|
||||||
|
@deftypefnx {C Function} scm_t_int32 scm_to_int32 (SCM x)
|
||||||
|
@deftypefnx {C Function} scm_t_uint32 scm_to_uint32 (SCM x)
|
||||||
|
@deftypefnx {C Function} scm_t_int64 scm_to_int64 (SCM x)
|
||||||
|
@deftypefnx {C Function} scm_t_uint64 scm_to_uint64 (SCM x)
|
||||||
|
@deftypefnx {C Function} scm_t_intmax scm_to_intmax (SCM x)
|
||||||
|
@deftypefnx {C Function} scm_t_uintmax scm_to_uintmax (SCM x)
|
||||||
|
When @var{x} represents an integer that fits into the indicated C
|
||||||
|
type, return that integer. Else signal an error, either a
|
||||||
|
`wrong-type' error when @var{x} is not an integer, or an
|
||||||
|
`out-of-range' error when it doesn't fit the given range.
|
||||||
|
|
||||||
|
The functions @code{scm_to_long_long}, @code{scm_to_ulong_long},
|
||||||
|
@code{scm_to_int64}, and @code{scm_to_uint64} are only available when
|
||||||
|
the corresponding types are.
|
||||||
|
@end deftypefn
|
||||||
|
|
||||||
|
@deftypefn {C Function} SCM scm_from_char (char x)
|
||||||
|
@deftypefnx {C Function} SCM scm_from_schar (signed char x)
|
||||||
|
@deftypefnx {C Function} SCM scm_from_uchar (unsigned char x)
|
||||||
|
@deftypefnx {C Function} SCM scm_from_short (short x)
|
||||||
|
@deftypefnx {C Function} SCM scm_from_ushort (unsigned short x)
|
||||||
|
@deftypefnx {C Function} SCM scm_from_int (int x)
|
||||||
|
@deftypefnx {C Function} SCM scm_from_uint (unsigned int x)
|
||||||
|
@deftypefnx {C Function} SCM scm_from_long (long x)
|
||||||
|
@deftypefnx {C Function} SCM scm_from_ulong (unsigned long x)
|
||||||
|
@deftypefnx {C Function} SCM scm_from_long_long (long long x)
|
||||||
|
@deftypefnx {C Function} SCM scm_from_ulong_long (unsigned long long x)
|
||||||
|
@deftypefnx {C Function} SCM scm_from_size_t (size_t x)
|
||||||
|
@deftypefnx {C Function} SCM scm_from_ssize_t (ssize_t x)
|
||||||
|
@deftypefnx {C Function} SCM scm_from_int8 (scm_t_int8 x)
|
||||||
|
@deftypefnx {C Function} SCM scm_from_uint8 (scm_t_uint8 x)
|
||||||
|
@deftypefnx {C Function} SCM scm_from_int16 (scm_t_int16 x)
|
||||||
|
@deftypefnx {C Function} SCM scm_from_uint16 (scm_t_uint16 x)
|
||||||
|
@deftypefnx {C Function} SCM scm_from_int32 (scm_t_int32 x)
|
||||||
|
@deftypefnx {C Function} SCM scm_from_uint32 (scm_t_uint32 x)
|
||||||
|
@deftypefnx {C Function} SCM scm_from_int64 (scm_t_int64 x)
|
||||||
|
@deftypefnx {C Function} SCM scm_from_uint64 (scm_t_uint64 x)
|
||||||
|
@deftypefnx {C Function} SCM scm_from_intmax (scm_t_intmax x)
|
||||||
|
@deftypefnx {C Function} SCM scm_from_uintmax (scm_t_uintmax x)
|
||||||
|
Return the @code{SCM} value that represents the integer @var{x}.
|
||||||
|
These functions will always succeed.
|
||||||
|
@end deftypefn
|
||||||
|
|
||||||
@node Reals and Rationals
|
@node Reals and Rationals
|
||||||
@subsubsection Real and Rational Numbers
|
@subsubsection Real and Rational Numbers
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue