From 7f0af1b46a453771e746980d132c81fdfbf28287 Mon Sep 17 00:00:00 2001 From: Jan Nieuwenhuizen Date: Wed, 16 May 2018 23:31:39 +0200 Subject: [PATCH] mes: string-join: Support optional delimiter, support grammar. * 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 | 12 ++++++++++++ tests/srfi-13.test | 16 ++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/module/srfi/srfi-13.mes b/module/srfi/srfi-13.mes index 4e3ff7ef..7da2d77c 100644 --- a/module/srfi/srfi-13.mes +++ b/module/srfi/srfi-13.mes @@ -27,6 +27,18 @@ (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))) diff --git a/tests/srfi-13.test b/tests/srfi-13.test index 3c7ef853..882b4ce3 100755 --- a/tests/srfi-13.test +++ b/tests/srfi-13.test @@ -31,6 +31,22 @@ exit $? (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" #\:))