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