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 <[email protected]> wrote:
> On 30 December 2011 21:03, Neil Jerram <[email protected]> wrote:
> > Nala Ginrut <[email protected]> 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'
> !).
>