mes: string-join: Support optional delimiter, support grammar.
[mes.git] / module / srfi / srfi-13.mes
index 4e3ff7ef886291b1ff393321e56cf07b5fdf5bc0..7da2d77cea147b47b7570430e4934e238f5f1c58 100644 (file)
 (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)))