From 8e1b25368b80f7d66a37ef528fc0f336e099ffef Mon Sep 17 00:00:00 2001 From: Jan Nieuwenhuizen Date: Tue, 20 Dec 2016 19:25:26 +0100 Subject: [PATCH] Add iota. * module/mes/scm.mes: (iota): New function. * tests/scm.test (iota, iota 0, iota -1): New tests. --- module/mes/scm.mes | 4 ++++ module/srfi/srfi-43.mes | 4 ++-- tests/scm.test | 9 +++++++++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/module/mes/scm.mes b/module/mes/scm.mes index 1fe83e88..422aef6f 100644 --- a/module/mes/scm.mes +++ b/module/mes/scm.mes @@ -219,6 +219,10 @@ (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)) diff --git a/module/srfi/srfi-43.mes b/module/srfi/srfi-43.mes index b29cab17..4fe719c2 100644 --- a/module/srfi/srfi-43.mes +++ b/module/srfi/srfi-43.mes @@ -25,7 +25,7 @@ ;;; 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) - (for-each f (vector->list v) (iota (vector-length v)))) + (for-each f (iota (vector-length v)) (vector->list v))) diff --git a/tests/scm.test b/tests/scm.test index 1f22d087..955b3c5a 100755 --- a/tests/scm.test +++ b/tests/scm.test @@ -115,6 +115,15 @@ exit $? ;; (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))