diff --git a/scheme/base.sld b/scheme/base.sld index 84fdfd4a..9e43325b 100644 --- a/scheme/base.sld +++ b/scheme/base.sld @@ -48,6 +48,7 @@ vector->list vector->string vector-map + vector-for-each make-string string string-copy @@ -56,6 +57,7 @@ string->list string->vector string-map + string-for-each make-parameter current-output-port current-input-port @@ -266,8 +268,12 @@ (loop start))) (define (string-map func str) (list->string (map func (string->list str)))) + (define (string-for-each func str) + (for-each func (string->list str))) (define (vector-map func vec) (list->vector (map func (vector->list vec)))) + (define (vector-for-each func vec) + (for-each func (vector->list vec))) (define (vector-append . vecs) (list->vector (apply append (map vector->list vecs)))) diff --git a/tests/unit-tests.scm b/tests/unit-tests.scm index 4ee7f1af..4a7cf41c 100644 --- a/tests/unit-tests.scm +++ b/tests/unit-tests.scm @@ -148,6 +148,11 @@ (define a "12345") (define b (string-copy "abcde")) (assert:equal "string-copy!" (string-copy! b 1 a 0 2) "a12de") +(let ((v '())) + (string-for-each + (lambda (c) (set! v (cons (char->integer c) v))) + "abcde") + (assert:equal "string-for-each" v '(101 100 99 98 97))) ;; Recursion example: (letrec ((fnc (lambda (i)