rebellion
rebellion copied to clipboard
Transducers for inserting extra elements into the stream
Signatures:
(inserting-at [v any/c]
[position natural?]
[#:mode mode out-of-bounds-insertion-mode?
raise-out-of-bounds-error]) -> transducer?
out-of-bounds-insertion-mode? : predicate/c
raise-out-of-bounds-error : out-of-bounds-insertion-mode?
skip-out-of-bounds-insertion : out-of-bounds-insertion-mode?
insert-out-of-bounds-at-end : out-of-bounds-insertion-mode?
(inserting-at-start [v any/c]) -> transducer?
(inserting-at-end [v any/c]) -> transducer?
Examples:
> (transduce "aaa" (inserting-at-start #\x) #:into into-string)
"xaaa"
> (transduce "aaa" (inserting-at-end #\x) #:into into-string)
"aaax"
> (transduce "aaa" (inserting-at #\x 1) #:into into-string)
"axaa"
> (transduce "aaa" (inserting-at #\x 8) #:into into-string)
error: out of bounds!
> (transduce "aaa"
(inserting-at #\x 8 #:mode skip-out-of-bounds-insertion)
#:into into-string)
"aaa"
> (transduce "aaa"
(inserting-at #\x 8 #:mode insert-out-of-bounds-at-end)
#:into into-string)
"aaax"
Does inserting-in-between
seem like a good addition for this?
Signature:
(inserting-in-between [v any/c]) -> transducer?
Example:
> (transduce "aaa"
(inserting-in-between #\b)
#:into into-string)
"ababa"
Yes, definitely. Eventually I want to offer a transducer-based alternative for all of the use cases of add-between
, including the various keyword arguments it has. Will probably be multiple issues though, since add-between
does a lot of different things. That #:splice?
keyword is magic.
@samdphillips Over four years later, your suggestion is finally implemented. See #524.