Daniel Hartwig <mand...@gmail.com> writes:
> On 19 September 2012 03:59, Chris K. Jester-Young <cky...@gmail.com> wrote:
>> (define* (regexp-split pat str #:optional (limit 0))
>> […]
>>     (reverse (if (zero? limit)
>>                  (drop-while string-null? final)
>>                  final))))
>>
>
> Please simplify this limit arg, removing the maybe-drop-empty-strings
> behaviour.  Either positive limit or #f for all matches.  It is
> trivial for the caller to remove the empty strings if desired, and
> simplifies the docs for regexp-split.  Matching perl semantics is not
> necessarily desirable.

FWIW, I agree with Daniel.  I dislike the complicated semantics of this
'limit' argument, which combines into a single number two different
concepts:

* What limiting mode to use:

   [A] return 'limit' many fields at most
   [B] return all fields
   [C] return all fields except trailing blank fields

* How many fields, if using limiting mode [A].

Beyond matters of taste, I don't like this because it makes bugs less
likely to be caught.  Suppose 'limit' is a computed value, normally
expected to be positive.  Code that follows may implicitly assume that
the returned list has no more than 'limit' elements.  Now suppose that
due to a bug or exceptional circumstance, the computed 'limit' ends up
being less than 1.  Now 'regexp-split' switches to a qualitatively
different mode of behavior.

I'd prefer for a numeric limit to be interpreted in a uniform way.  That
suggests that a non-positive 'limit' should raise an exception.

Limiting modes [B] and [C] could be indicated in a few different ways.
One possibility would be to pass special symbol values for the 'limit'
argument to indicate these two other modes.

Another possibility is to add a 'drop-right-while' procedure (analogous
to SRFI-1's 'drop-while'), and then users who want this could do:

  (drop-right-while string-null?
                    (regexp-split ...))

    Regards,
      Mark

Reply via email to