cyclone/docs/api/srfi/143.md
2017-08-21 13:37:02 +00:00

302 lines
5.1 KiB
Markdown

# SRFI 143 - Fixnums
This SRFI describes arithmetic procedures applicable to a limited range of exact integers only. These procedures are semantically similar to the corresponding generic-arithmetic procedures, but allow more efficient implementations.
See the [SRFI document](http://srfi.schemers.org/srfi-143/srfi-143.html) for more information.
## Constants
[`fx-width`](#fx-width)
[`fx-greatest`](#fx-greatest)
[`fx-least`](#fx-least)
## Predicates
[`fixnum?`](#fixnum)
[`fx=?`](#fx)
[`fx<?`](#fx-1)
[`fx>?`](#fx-2)
[`fx<=?`](#fx-3)
[`fx>=?`](#fx-4)
[`fxzero?`](#fxzero)
[`fxpositive?`](#fxpositive)
[`fxnegative?`](#fxnegative)
[`fxodd?`](#fxodd)
[`fxeven?`](#fxeven)
[`fxmax`](#fxmax)
[`fxmin`](#fxmin)
## Basic arithmetic
[`fx+`](#fx-5)
[`fx-`](#fx-)
[`fx*`](#fx-6)
[`fxneg`](#fxneg)
[`fxquotient`](#fxquotient)
[`fxremainder`](#fxremainder)
[`fxabs`](#fxabs)
[`fxsquare`](#fxsquare)
[`fxsqrt`](#fxsqrt)
# Bitwise operations
[`fxnot`](#fxnot)
[`fxand`](#fxand)
[`fxior`](#fxior)
[`fxxor`](#fxxor)
[`fxarithmetic-shift`](#fxarithmetic-shift)
[`fxarithmetic-shift-left`](#fxarithmetic-shift-left)
[`fxarithmetic-shift-right`](#fxarithmetic-shift-right)
[`fxbit-count`](#fxbit-count)
[`fxlength`](#fxlength)
[`fxif`](#fxif)
[`fxbit-set?`](#fxbit-set)
[`fxcopy-bit`](#fxcopy-bit)
[`fxfirst-set-bit`](#fxfirst-set-bit)
[`fxbit-field`](#fxbit-field)
[`fxbit-field-rotate`](#fxbit-field-rotate)
[`fxbit-field-reverse`](#fxbit-field-reverse)
# fx-width
(fx-width)
Bound to the value `w` that specifies the implementation-defined fixnum integer range.
# fx-greatest
(fx-greatest)
Returns value of the largest representable fixnum.
# fx-least
(fx-least)
Returns value of the smallest representable fixnum.
# fixnum?
(fixnum? obj)
Returns `#t` if `obj` is an exact integer within the fixnum range, and `#f` otherwise.
# fx=?
(fx=? i j)
Semantically equivalent to `=`.
# fx<?
(fx<? i j)
Semantically equivalent to `<`.
# fx>?
(fx>? i j)
Semantically equivalent to `>`.
# fx<=?
(fx<=? i j)
Semantically equivalent to `<=`.
# fx>=?
(fx>=? i j)
Semantically equivalent to `>=`.
# fxzero?
(fxzero? i)
Semantically equivalent to `zero?`.
# fxpositive?
(fxpostiive? i)
Semantically equivalent to `positive?`.
# fxnegative?
(fxnegative? i)
Semantically equivalent to `negative?`.
# fxodd?
(fxodd? i)
Semantically equivalent to `odd?`.
# fxeven?
(fxeven? i)
Semantically equivalent to `even?`.
# fxmax
(fxmax i j)
Semantically equivalent to `max`.
# fxmin
(fxmin i j)
Semantically equivalent to `min`.
# fx+
(fx+ i j)
Semantically equivalent to `+`, but accepts exactly two arguments.
# fx-
(fx- i j)
Semantically equivalent to `-`, but accepts exactly two arguments.
# fx*
(fx* i j)
Semantically equivalent to `*`, but accepts exactly two arguments.
# fxneg
(fxneg i)
Semantically equivalent to `-`, but accepts exactly one argument.
# fxquotient
(fxquotient i j)
Semantically equivalent to `quotient`.
# fxremainder
(fxremainder i j)
Semantically equivalent to `remainder`.
# fxabs
(fxabs i)
Semantically equivalent to `abs`.
# fxsquare
(fxsquare i)
Semantically equivalent to `square`.
# fxsqrt
(fxsqrt i)
Semantically equivalent to `sqrt`.
# fxnot
(fxnot i)
Semantically equivalent to `bitwise-not`.
# fxand
(fxand i j)
Semantically equivalent to `bitwise-and`.
# fxior
(fxior i j)
Semantically equivalent to `bitwise-ior`.
# fxxor
(fxxor i j)
Semantically equivalent to `bitwise-xor`.
# fxarithmetic-shift
(fxarithmetic-shift i count)
Semantically equivalent to `arithmetic-shift`, except that it is an error for the absolute value of count to exceed `w-1`.
# fxarithmetic-shift-left
(fxarithmetic-shift-left i count)
The same as `fxarithmetic-shift` except that a negative value of count is an error. This is provided for additional efficiency.
# fxarithmetic-shift-right
(fxarithmetic-shift-right i count)
The same as `fxarithmetic-shift` except that a non-negative value of count specifies the number of bits to shift right, and a negative value is an error. This is provided for additional efficiency.
# fxbit-count
(fxbit-count i)
Semantically equivalent to SRFI 151 `bit-count`.
# fxlength
(fxlength i)
Semantically equivalent to `integer-length`.
# fxif
(fxif mask i j)
Semantically equivalent to `bitwise-if`.
# fxbit-set?
(fxbit-set? index i)
Semantically equivalent to SRFI 151 `bit-set?`, except that it is an error for `index` to be larger than or equal to `fx-width`.
# fxcopy-bit
(fxcopy-bit index i boolean)
Semantically equivalent to SRFI 151 `copy-bit`, except that it is an error for `index` to be larger than or equal to `fx-width`.
# fxfirst-set-bit
(fxfirst-set-bit i)
Semantically equivalent to `first-set-bit`.
# fxbit-field
(fxbit-field i start end)
Semantically equivalent to `bit-field`.
# fxbit-field-rotate
(fxbit-field-rotate i count start end)
Semantically equivalent to SRFI 151 `bit-field-rotate`.
# fxbit-field-reverse
(fxbit-field-reverse i start end)
Semantically equivalent to `bit-field-reverse`.