Thanks for taking a look Christopher! Christopher Lam writes: > I think the last test should be: > > (pass-if "string-split-substring - non-empty, trailing delimiters" > (equal? (string-split-substring "barfoo" "foo") > (list "bar" "")))) Good catch, thank you! I have fixed it in the updated patch attached to this email. > And isn't it more efficient to use substring/shared instead of > substring? It might? However, it seems like that would violate the functional expection that modifying the strings returned from the function wouldn't change the string that was being split. Quoting the manual: > Scheme Procedure: substring/shared str start [end] > C Function: scm_substring_shared (str, start, end) > > Like substring, but the strings continue to share their storage > even if they are modified. Thus, modifications to str show up in > the new string, and vice versa. That seems like surprising behavior to me (when you don't know that they are shared). In case sharing is important, one can add a `string-split-substring/shared' procedure? ~ Vijay