mes: Add string-downcase, string-upcase, string-tokenize.
authorJan Nieuwenhuizen <janneke@gnu.org>
Sun, 11 Nov 2018 09:00:04 +0000 (10:00 +0100)
committerJan Nieuwenhuizen <janneke@gnu.org>
Sun, 11 Nov 2018 09:00:04 +0000 (10:00 +0100)
* mes/module/srfi/srfi-13.mes (string-downcase, string-upcase,
string-tokenize): New function.

mes/module/srfi/srfi-13.mes

index 2931616671b2197c320b31e403daea30f60e32c3..2735cfcc2046d71a1c50dffa60430bdd7111c1ff 100644 (file)
       (string->list (string-take string (or start1 0)))
       (string->list replace)
       (string->list (string-drop string (or end1 (string-length string))))))))
+
+(define (string-downcase string)
+  (string-map char-downcase string))
+
+(define (string-upcase string)
+  (string-map char-upcase string))
+
+(define (string-tokenize string char-set)
+  (let loop ((lst (string->list string)) (result '()))
+    (if (null? lst) (reverse result)
+        (let match ((lst lst) (found '()))
+          (if (null? lst) (loop lst (if (null? found) (reverse result)
+                                        (cons (list->string (reverse found)) result)))
+              (let ((c (car lst)))
+                (if (not (char-set-contains? char-set c)) (loop (cdr lst)
+                                                                (if (null? found) result
+                                                                    (cons (list->string (reverse found)) result)))
+                    (match (cdr lst) (cons c found)))))))))