Yesterday, Sam Tobin-Hochstadt wrote: > I think `racket/string' should provide the useful string functions, > rather than refer users to srfis. The only srfi/13 function I ever > use is `string-trim-both' -- any objection to adding that to > `racket/string'?
+1 for this in general, and since the `trim' function is the one that usually leads to this question, it makes sense to add it. I have most done of that now. Some observations: * Looking around, there are two kinds of "customizations" -- the characters that are removed, and which side to remove from (usually in the form of three functions). I'm going with a single `string-trim' function with an optional regexp for the first and `#:left?' and `#:right' keywords for the latter. * It's possible to go with other ways to specify characters, up to srfi-13's use of srfi-14, and this is part of why I didn't add a trim function yet. I now think that it's best to have something that is usually useful (which is by far "just whitespaces") and be done with it. If you need one of these sophisticated things, the `regexp-replace' way is still easy enough. * Another point is the best way to run it efficiently. There was a largish discussion a while ago about various ways to do that (and I happened to have gone through a bunch of options shortly before that too). See also http://blog.stevenlevithan.com/archives/faster-trim-javascript for an overview of options in JS. So in the same spirit as above, I'm just doing something that works reasonably well. (Again, assuming that if speed is really important, then you probably have a good idea on the strings that you're trimming and you can just do whatever works for you directly.) * Finally, I'm also adding a related function: `string-normalize-spaces', which takes a string and a regexp for the spaces, and turns all spaces into single ones. Same principles as above. This one is getting a `#:trim?' keyword that says whether spaces at the edges should be dropped (the default) or normalized. BTW, I hate that name -- it makes the `string-' prefix looks even uglier... Any suggestions for a better name? -- ((lambda (x) (x x)) (lambda (x) (x x))) Eli Barzilay: http://barzilay.org/ Maze is Life! _________________________ Racket Developers list: http://lists.racket-lang.org/dev