Add iota.
authorJan Nieuwenhuizen <janneke@gnu.org>
Tue, 20 Dec 2016 18:25:26 +0000 (19:25 +0100)
committerJan Nieuwenhuizen <janneke@gnu.org>
Tue, 20 Dec 2016 18:25:26 +0000 (19:25 +0100)
* module/mes/scm.mes: (iota): New function.
* tests/scm.test (iota, iota 0, iota -1): New tests.

module/mes/scm.mes
module/srfi/srfi-43.mes
tests/scm.test

index 1fe83e882ecfc603c75ed17619832ab483037456..422aef6f0682d3abc56de3ca7192153b70178831 100644 (file)
     (if (= 0 k) (car lst)
         (loop (cdr lst) (- k 1)))))
 
     (if (= 0 k) (car lst)
         (loop (cdr lst) (- k 1)))))
 
+(define (iota n)
+  (if (<= n 0) '()
+      (append2 (iota (- n 1)) (list (- n 1)))))
+
 ;; srfi-1
 (define (last-pair lst)
   (let loop ((lst lst))
 ;; srfi-1
 (define (last-pair lst)
   (let loop ((lst lst))
index b29cab17cfeefbeabcf0de5f28bc95461d1db2b4..4fe719c2da4c684ea48b5ffcc073288639bbf72b 100644 (file)
@@ -25,7 +25,7 @@
 ;;; Code:
 
 (define (vector-map f v)
 ;;; Code:
 
 (define (vector-map f v)
-  (list->vector (map f (vector->list v) (iota (vector-length v)))))
+  (list->vector (map f (iota (vector-length v)) (vector->list v))))
 
 (define (vector-for-each f v)
 
 (define (vector-for-each f v)
-  (for-each f (vector->list v) (iota (vector-length v))))
+  (for-each f (iota (vector-length v)) (vector->list v)))
index 1f22d08720e071d2bbe2b84db0eed38cc2a1968c..955b3c5ab01067045f7d260d0b227c6c223f3041 100755 (executable)
@@ -115,6 +115,15 @@ exit $?
 ;;      (circular-list? x))
 ;;    #t))
 
 ;;      (circular-list? x))
 ;;    #t))
 
+(pass-if-equal "iota"
+    '(0 1 2) (iota 3))
+
+(pass-if-equal "iota 0"
+    '() (iota 0))
+
+(pass-if-equal "iota -1"
+    '() (iota -1))
+
 (pass-if "reverse" (sequal? (reverse '(1 2 3)) '(3 2 1)))
 
 (pass-if "cond-expand" (sequal? (cond-expand (foobar #f) (mes (display ": pass: *YAY*") 'mes) (guile (display ": pass: *GUILE*") 'mes)) 'mes))
 (pass-if "reverse" (sequal? (reverse '(1 2 3)) '(3 2 1)))
 
 (pass-if "cond-expand" (sequal? (cond-expand (foobar #f) (mes (display ": pass: *YAY*") 'mes) (guile (display ": pass: *GUILE*") 'mes)) 'mes))