mes: Add string-replace.
authorJan Nieuwenhuizen <janneke@gnu.org>
Sun, 29 Apr 2018 16:27:29 +0000 (18:27 +0200)
committerJan Nieuwenhuizen <janneke@gnu.org>
Sun, 29 Apr 2018 16:27:29 +0000 (18:27 +0200)
* module/srfi/srfi-13.mes (string-replace): New function.
* tests/srfi-13.test ("string-replace"): Test it.

module/srfi/srfi-13.mes
tests/srfi-13.test

index 196e8f3944e093e23460e7df5430f47dccf83726..4e3ff7ef886291b1ff393321e56cf07b5fdf5bc0 100644 (file)
 (define (string-map f string)
   (list->string (map f (string->list string))))
 
+(define (string-replace string replace . rest)
+  (let* ((start1 (and (pair? rest) (car rest)))
+         (end1 (and start1 (pair? (cdr rest)) (cadr rest)))
+         (start2 (and end1 (pair? (cddr rest)) (caddr rest)))
+         (end2 (and start2 (pair? (cdddr rest)) (cadddr rest))))
+    (if start2 (error "string-replace: not supported: START2=" start2))
+    (if end2 (error "string-replace: not supported: END2=" end2))
+    (list->string
+     (append
+      (string->list (string-take string (or start1 0)))
+      (string->list replace)
+      (string->list (string-drop string (or end1 (string-length string))))))))
index 29035ccd569f9f722143f57422cee6f2c601fac2..afa75f547cc035706c77c70ff7b09ad93a6592bd 100755 (executable)
@@ -80,4 +80,8 @@ exit $?
 (pass-if-equal "string-map" "fuubar"
              (string-map (lambda (c) (if (eq? c #\o) #\u c)) "foobar"))
 
+(pass-if-equal "string-replace" "fubar"
+             (string-replace "foobar" "u" 1 3))
+
+
 (result 'report)