Add list-set!, string-set!
authorJan Nieuwenhuizen <janneke@gnu.org>
Sun, 25 Dec 2016 23:16:37 +0000 (00:16 +0100)
committerJan Nieuwenhuizen <janneke@gnu.org>
Wed, 4 Jan 2017 08:12:21 +0000 (09:12 +0100)
* module/mes/scm.mes (list-set!, string-set!): New functions.

module/mes/scm.mes

index c5da0f6cfc99b2212b798e876de068ca36e44317..6172a4ba4d8e78e8053623bb2b3ebb1a186af7ab 100644 (file)
     (if (= 0 k) (car lst)
         (loop (cdr lst) (- k 1)))))
 
     (if (= 0 k) (car lst)
         (loop (cdr lst) (- k 1)))))
 
+(define (list-set! lst k v)
+  (let loop ((lst lst) (k k))
+    (if (= 0 k) (set-car! lst v)
+        (loop (cdr lst) (- k 1)))))
+
 (define (list-head x n)
   (if (= 0 n) '()
       (cons (car x) (list-head (cdr x) (- n 1)))))
 (define (list-head x n)
   (if (= 0 n) '()
       (cons (car x) (list-head (cdr x) (- n 1)))))
 (define (string-ref s k)
   (list-ref (string->list s) k))
 
 (define (string-ref s k)
   (list-ref (string->list s) k))
 
+(define (string-set! s k v)
+  (list->string (list-set! (string->list s) k v)))
+
 (define (substring s start . rest)
   (let* ((end (and (pair? rest) (car rest)))
          (lst (list-tail (string->list s) start)))
 (define (substring s start . rest)
   (let* ((end (and (pair? rest) (car rest)))
          (lst (list-tail (string->list s) start)))