range-reverse missing from spec Shiro Kawai (05 Jul 2021 12:48 UTC)
Re: range-reverse missing from spec Arthur A. Gleckler (05 Jul 2021 15:35 UTC)
Re: range-reverse missing from spec Arthur A. Gleckler (05 Jul 2021 18:08 UTC)
Re: range-reverse missing from spec John Cowan (06 Jul 2021 03:40 UTC)
Re: range-reverse missing from spec Shiro Kawai (06 Jul 2021 03:49 UTC)
Re: range-reverse missing from spec John Cowan (06 Jul 2021 11:08 UTC)
Re: range-reverse missing from spec Wolfgang Corcoran-Mathe (06 Jul 2021 16:12 UTC)
(missing)
Re: range-reverse missing from spec Wolfgang Corcoran-Mathe (06 Jul 2021 18:56 UTC)
Re: range-reverse missing from spec Shiro Kawai (06 Jul 2021 19:54 UTC)
Re: range-reverse missing from spec Wolfgang Corcoran-Mathe (07 Jul 2021 00:40 UTC)
Re: range-reverse missing from spec Shiro Kawai (07 Jul 2021 02:10 UTC)
Re: range-reverse missing from spec Wolfgang Corcoran-Mathe (07 Jul 2021 03:50 UTC)
Re: range-reverse missing from spec Wolfgang Corcoran-Mathe (06 Jul 2021 16:16 UTC)
Re: range-reverse missing from spec Arthur A. Gleckler (06 Jul 2021 18:13 UTC)

Re: range-reverse missing from spec Wolfgang Corcoran-Mathe 06 Jul 2021 18:56 UTC

On 2021-07-06 14:00 -0400, John Cowan wrote:
> On Tue, Jul 6, 2021 at 12:12 PM Wolfgang Corcoran-Mathe <xxxxxx@sigwinch.xyz>
> wrote:
>
> * range-reverse may return an expanded range.
> >
>
> How's that?  Or do you mean that it returns a compact range on a compact
> range and an extended range on an extended range, which is what I would
> expect?  (Reverse the start and end values and negate the step in the first
> case, reverse the contents in the second case.)

No, sic.  As we discussed back in September[1], many of the range
operations are expected to work via composition of indexer functions,
with the range being expanded only when the number of compositions
reaches a certain threshold.  range-reverse was actually the poster
child for this discussion, though, ironically, it was missing from the
spec the whole time; here's the sample implementation:

(define (range-reverse r)
  (assume (range? r))
  (%range-maybe-vectorize           ; expand the range if composition
   (raw-range (range-start-index r) ; has reached threshold
              (range-length r)
              (lambda (n)
                ((range-indexer r) (- (range-length r) 1 n)))
              (+ 1 (range-complexity r)))))  ; bump complexity

We could do things differently, of course.  In any case, I hope we
don't have to rerun the lengthy discussion of this issue from last
fall.

[1] https://srfi-email.schemers.org/srfi-196/msg/15115132/

--
Wolfgang Corcoran-Mathe  <xxxxxx@sigwinch.xyz>

"A LISP programmer knows the value of everything, but the cost
of nothing." --Alan J. Perlis