Now that we have previous thread on this topic, I think it's no need to
format a patch.

Maybe this will solve the problem:
(define* (regexp-split regex str #:optional (flags 0))
  (let ((ret (fold-matches
      regex str (list '() 0 str)
      (lambda (m prev)
(let* ((ll (car prev))
       (start (cadr prev))
       (tail (match:suffix m))
       (end (match:start m))
       (s (substring/shared str start end))
       (groups (map (lambda (n) (match:substring m n))
    (iota (1- (match:count m))))))
  (list `(,@ll ,s ,@groups) (match:end m) tail)))
      flags)))
    `(,@(car ret) ,(caddr ret))))


On Fri, Dec 30, 2011 at 11:33 PM, Daniel Hartwig <mand...@gmail.com> wrote:

> On 30 December 2011 21:03, Neil Jerram <n...@ossau.homelinux.net> wrote:
> > Nala Ginrut <nalagin...@gmail.com> writes:
> >
> >> hi guilers!
> >> It seems like there's no "regexp-split" procedure in Guile.
> >> What we have is "string-split" which accepted Char only.
> >> So I wrote one for myself.
> >
> > We've had this topic before, and it only needs a search for
> > "regex-split guile" to find it:
> > http://old.nabble.com/regex-split-for-Guile-td31093245.html.
> >
>
> Good to see that there is continuing interest in this feature.
>
> IMO, the implementation here is more elegant and readable for it's use
> of `fold-matches'.  The first implementation from the thread you
> mention effectively rolls it's own version of `fold-matches' over the
> result of `list-matches' (which is implemented using `fold-matches'
> !).
>

Reply via email to