lloda pushed a commit to branch main in repository guile. commit 3243d96bb5b9658f08847a7073fe6c0b2ccab6be Author: Taylan Kammer <taylan.kam...@gmail.com> AuthorDate: Wed May 12 22:36:26 2021 +0200
Fix (scheme base) string-for-each. * module/scheme/base.scm (r7:string-for-each): New procedure. Fixes <https://bugs.gnu.org/40584>. --- module/scheme/base.scm | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/module/scheme/base.scm b/module/scheme/base.scm index b3d37a6ef..9ad16a371 100644 --- a/module/scheme/base.scm +++ b/module/scheme/base.scm @@ -51,6 +51,7 @@ open-output-bytevector get-output-bytevector peek-u8 read-u8 read-bytevector read-bytevector! read-string read-line + (r7:string-for-each . string-for-each) write-u8 write-bytevector write-string flush-output-port (r7:string-map . string-map) bytevector bytevector-append @@ -106,7 +107,7 @@ real? remainder reverse round set! set-car! set-cdr! string string->list string->number string->symbol string-append - string-copy string-copy! string-fill! string-for-each + string-copy string-copy! string-fill! string-length string-ref string-set! string<=? string<? string=? string>=? string>? string? substring symbol->string symbol? syntax-error syntax-rules truncate @@ -401,7 +402,28 @@ (define (r7:string-map proc s . s*) (if (null? s*) (string-map proc s) - (list->string (apply map proc (string->list s) (map string->list s*))))) + (list->string (apply map proc (string->list s) (map string->list + s*))))) + +(define r7:string-for-each + (case-lambda + ((proc s) (string-for-each proc s)) + ((proc s1 s2) + (let ((len (min (string-length s1) + (string-length s2)))) + (let loop ((i 0)) + (when (< i len) + (proc (string-ref s1 i) + (string-ref s2 i)) + (loop (+ i 1)))))) + ((proc . strings) + (let ((len (apply min (map string-length strings)))) + (let loop ((i 0)) + (when (< i len) + (apply proc (map (lambda (s) + (string-ref s i)) + strings)) + (loop (+ i 1)))))))) (define (bytevector . lis) (u8-list->bytevector lis))