Move string-fold{,-right} into runtime.
authorChris Hanson <org/chris-hanson/cph>
Sun, 1 Dec 2019 23:19:58 +0000 (15:19 -0800)
committerChris Hanson <org/chris-hanson/cph>
Mon, 2 Dec 2019 17:50:06 +0000 (09:50 -0800)
src/libraries/srfi-140.scm
src/runtime/runtime.pkg
src/runtime/string.scm

index cbe93de3e230b5020adc5033b94abd4cf2631542..5362b5ba19e4b000de6e67221b6322d616429926 100644 (file)
@@ -48,6 +48,8 @@ USA.
                        string->utf16le
                        string-append*
                        string-builder
+                       string-fold
+                       string-fold-right
                        string-joiner*
                        string-null?
                        string-padder
@@ -421,24 +423,6 @@ USA.
       (else
        (error:bad-range-argument grammar 'string-join)))))
 
-(define (string-fold kons knil string #!optional start end)
-  (let* ((end (fix:end-index end (string-length string) 'string-fold))
-        (start (fix:start-index start end 'string-fold)))
-    (let loop ((index start) (knil knil))
-      (if (fx<? index end)
-         (loop (fx+ index 1)
-               (kons (string-ref string index) knil))
-         knil))))
-
-(define (string-fold-right kons knil string #!optional start end)
-  (let* ((end (fix:end-index end (string-length string) 'string-fold-right))
-        (start (fix:start-index start end 'string-fold-right)))
-    (let loop ((index (fx- end 1)) (knil knil))
-      (if (fx>=? index start)
-         (loop (fx- index 1)
-               (kons (string-ref string index) knil))
-         knil))))
-
 (define (string-map-index proc string #!optional start end)
   (let* ((end (fix:end-index end (string-length string) 'string-map-index))
         (start (fix:start-index start end 'string-map-index)))
index ad04d333e199c67f7a216e86610395a7933dfa88..a7e09421ef69ac8460c42a79c1c0a964f18daaa2 100644 (file)
@@ -1169,6 +1169,8 @@ USA.
          string-find-previous-char
          string-find-previous-char-ci
          string-find-previous-char-in-set
+         string-fold                   ;SRFI 140
+         string-fold-right             ;SRFI 140
          string-foldcase
          string-for-each
          string-hash                   ;SRFI-69
index 962fb21c01257c898d278809b3f81e502b175fcf..daebebb396cfd227c2814b9d53ca9bf30710a438 100644 (file)
@@ -1810,6 +1810,24 @@ USA.
 \f
 ;;;; Mapping
 
+(define (string-fold kons knil string #!optional start end)
+  (let* ((end (fix:end-index end (string-length string) 'string-fold))
+        (start (fix:start-index start end 'string-fold)))
+    (let loop ((index start) (knil knil))
+      (if (fix:< index end)
+         (loop (fix:+ index 1)
+               (kons (string-ref string index) knil))
+         knil))))
+
+(define (string-fold-right kons knil string #!optional start end)
+  (let* ((end (fix:end-index end (string-length string) 'string-fold-right))
+        (start (fix:start-index start end 'string-fold-right)))
+    (let loop ((index (fx- end 1)) (knil knil))
+      (if (fix:>= index start)
+         (loop (fix:- index 1)
+               (kons (string-ref string index) knil))
+         knil))))
+
 (define (mapper-values proc string strings)
   (cond ((null? strings)
         (values (string-length string)