The Hilbert Space-Filling Curve is a one-to-one mapping between a unit line segment and an n-dimensional unit cube. This implementation treats the nonnegative integers either as fractional bits of a given width or as nonnegative integers.
The integer procedures map the non-negative integers to an arbitrarily large n-dimensional cube with its corner at the origin and all coordinates are non-negative.
For any exact nonnegative integer scalar and exact integer rank > 2,
(= scalar (hilbert-coordinates->integer (integer->hilbert-coordinates scalar rank))) ⇒ #t
When treating integers as k fractional bits,
(= scalar (hilbert-coordinates->integer (integer->hilbert-coordinates scalar rank k)) k) ⇒ #t
Returns a list of rank integer coordinates corresponding to exact
non-negative integer scalar. The lists returned by
integer->hilbert-coordinates for scalar arguments
0 and 1 will differ in the first element.
scalar must be a nonnegative integer of no more than
integer->hilbert-coordinates Returns a list of rank k-bit nonnegative integer
coordinates corresponding to exact non-negative integer scalar. The
curves generated by
integer->hilbert-coordinates have the same alignment independent of
Returns an exact non-negative integer corresponding to coords, a list of non-negative integer coordinates.
A Gray code is an ordering of non-negative integers in which exactly one bit differs between each pair of successive elements. There are multiple Gray codings. An n-bit Gray code corresponds to a Hamiltonian cycle on an n-dimensional hypercube.
Gray codes find use communicating incrementally changing values between asynchronous agents. De-laminated Gray codes comprise the coordinates of Hilbert space-filling curves.
Converts k to a Gray code of the same
Converts the Gray code k to an integer of the same
integer-length as k.
For any non-negative integer k,
(eqv? k (gray-code->integer (integer->gray-code k)))
These procedures return #t if their Gray code arguments are (respectively): equal, monotonically increasing, monotonically decreasing, monotonically nondecreasing, or monotonically nonincreasing.
For any non-negative integers k1 and k2, the Gray code
(integer->gray-code k1) and
(integer->gray-code k2) will return the same value as the
corresponding predicate of k1 and k2.
Returns a list of count integers comprised of the jth bit of the integers ks where j ranges from count-1 to 0.
(map (lambda (k) (number->string k 2)) (delaminate-list 4 '(7 6 5 4 0 0 0 0))) ⇒ ("0" "11110000" "11000000" "10100000")
delaminate-list is its own inverse:
(delaminate-list 8 (delaminate-list 4 '(7 6 5 4 0 0 0 0))) ⇒ (7 6 5 4 0 0 0 0)