[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

String library

This page is part of the web mail archives of SRFI 13 from before July 7th, 2015. The new archives for SRFI 13 contain all messages, not just those from before July 7th, 2015.



The SRFI-13 string library seems like a good proposal, but I have a few
comments.

Overall, I think that the library is too big, it has too many
procedures. I think we should try to remove some
unnessesary/redundant/seldom useful procedures.

Some specific comments:

* I think that string-for-each should work form left to right and that
no other string-iter[are] procedure should be included.

* I don't see the point in [sub]string-compare[-ci]. Can anybody give a
sensible example of their use?

* I think that the string-trim and string-pad procedures should be
named string-trim-left and string-pad-left. I don't think that left is
an obvious default for trimming and padding (as it is for string-index,
string-skip etc).

* I think that the let-string-start+end macro should be left out of the
standard. It's easily enough to do it anyway with the
string-parse-start+end procedure. And it might create problems to
include a macro.


I think that the KMP searching procedures should be generalized to
allow for other algorithms than KMP. But only to algorithms that have
the same properties as KMP, i.e. scanning a stream without
backtracking. This excludes Boyer-Moore, but allows for some recent
algorithms that are said to be faster than KMP[1].

The interface could be something like this:

make-search-object c= s [start end] -> opaque "search object"
    Returns an opaque "search object" that can be used to search
    for S in a stream/string. The search object includes S itself
    if nessesary (nessesary for KMP, but not for [1]).

search-step search-object c= c search-state -> bool or opaque "search state"
    Performs a step in the search, taking an opaque "search state"
    object and returns a new "search state" object. Use '() as search state
    for the first time.

Or why not like this:

make-search-proc c= s [start end] -> search procedure
    Returns a search procedure that can be used to search
    for S in a stream/string.

<search-proc> c -> bool 
    Performs a step in the search, updating an internal search state.

<search-proc> '() -> '()
	Reset the internal state of the search procedure.


[1] Sun Wu, Udi Manber: "Fast text searching allowing errors",
Communications of the ACM, October 1992.