mes: string-join: Support optional delimiter, support grammar.
authorJan Nieuwenhuizen <janneke@gnu.org>
Wed, 16 May 2018 21:31:39 +0000 (23:31 +0200)
committerJan Nieuwenhuizen <janneke@gnu.org>
Wed, 16 May 2018 21:31:39 +0000 (23:31 +0200)
* module/srfi/srfi-13.mes (string-join): Support optional infix and
  grammar.
* tests/srfi-13.test ("string-join"): Test it.

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

index 4e3ff7ef886291b1ff393321e56cf07b5fdf5bc0..7da2d77cea147b47b7570430e4934e238f5f1c58 100644 (file)
 (mes-use-module (srfi srfi-1))
 (mes-use-module (srfi srfi-14))
 
 (mes-use-module (srfi srfi-1))
 (mes-use-module (srfi srfi-14))
 
+(define (string-join lst . delimiter+grammar)
+  (let ((delimiter (or (and (pair? delimiter+grammar) (car delimiter+grammar))
+                       " "))
+        (grammar (or (and (pair? delimiter+grammar) (pair? (cdr delimiter+grammar)) (cadr delimiter+grammar))
+                     'infix)))
+    (if (null? lst) ""
+        (case grammar
+         ((infix) (if (null? (cdr lst)) (car lst)
+                                   (string-append (car lst) delimiter (string-join (cdr lst) delimiter))))
+         ((prefix) (string-append delimiter (car lst) (apply string-join (cdr lst) delimiter+grammar)))
+         ((suffix) (string-append (car lst) delimiter (apply string-join (cdr lst) delimiter+grammar)))))))
+
 (define (string-copy s)
   (list->string (string->list s)))
 
 (define (string-copy s)
   (list->string (string->list s)))
 
index 3c7ef8533022d0d4da716687e7ff42df609a3ff6..882b4ce3e2997b422b0a766946d714ffffcabd15 100755 (executable)
@@ -31,6 +31,22 @@ exit $?
 (pass-if "first dummy" #t)
 (pass-if-not "second dummy" #f)
 
 (pass-if "first dummy" #t)
 (pass-if-not "second dummy" #f)
 
+(pass-if-equal "string-join"
+               "foo bar"
+               (string-join '("foo" "bar")))
+
+(pass-if-equal "string-join infix"
+               "foo+bar"
+               (string-join '("foo" "bar") "+"))
+
+(pass-if-equal "string-join prefix"
+               ",foo,bar"
+               (string-join '("foo" "bar") "," 'prefix))
+
+(pass-if-equal "string-join suffix"
+               "foo,bar,"
+               (string-join '("foo" "bar") "," 'suffix))
+
 (pass-if-equal "string-split"
                '("foo")
                (string-split "foo" #\:))
 (pass-if-equal "string-split"
                '("foo")
                (string-split "foo" #\:))