- range-fold f sentinel numeric-rangeprocedure
- fixnum-range-fold f sentinel numeric-rangeprocedure
A folding operation that operates over numeric-range? records. The former (range-fold) is the more generic version of the two, in that it does not require that the ranges be composed of fixnums. The latter (fixnum-range-fold) is only valid for ranges that will iterate over fixnums.
(import transducers) (transduce range-fold (take 5) (collect-list) (counter 1.5 2)) ; => (1.5 3.5 5.5 7.5 9.5)
Whereas with fixnum-range-fold you will find that the above transduction fails:
(import transducers) (transduce fixnum-range-fold values (collect-list) (iota 5 1.5 2)) ; Error: (fixnum-range-fold) bad argument type - not a fixnum: 1.5 ; ; Call history: ; ; <syntax> (transduce fixnum-range-fold values (collect-list) (iota 5 1.5 2)) ; <syntax> (iota 5 1.5 2) ; <eval> (transduce fixnum-range-fold values (collect-list) (iota 5 1.5 2)) ; <eval> (iota 5 1.5 2) <--
The advantage of fixnum-range-fold is that it is faster than range-fold when your have a finite range (from range or iota) consisting only of integers. This is often the fastest way to iterate through over a set of indices.