Implement fix:iota.
authorChris Hanson <org/chris-hanson/cph>
Tue, 24 Jan 2017 22:10:30 +0000 (14:10 -0800)
committerChris Hanson <org/chris-hanson/cph>
Tue, 24 Jan 2017 22:10:30 +0000 (14:10 -0800)
src/runtime/fixart.scm

index 75d183650f25eb071400cc6d6fb6755e4aee8437..fecafb7a989b36962b347628cfd45be8526b90c1 100644 (file)
@@ -118,6 +118,30 @@ USA.
            (if (not (fix:fixnum? n))
                (error "Unable to compute smallest fixnum:" n))
            n)))))
+
+(define (fix:iota count #!optional start step)
+  (guarantee index-fixnum? count 'fix:iota)
+  (let ((start
+        (if (default-object? start)
+            0
+            (begin
+              (guarantee fix:fixnum? start 'fix:iota)
+              start)))
+       (step
+        (if (default-object? step)
+            1
+            (begin
+              (guarantee fix:fixnum? step 'fix:iota)
+              step))))
+    (let loop
+       ((index (fix:- count 1))
+        (value (fix:+ start (fix:* step (fix:- count 1))))
+        (result '()))
+      (if (fix:>= index 0)
+         (loop (fix:- index 1)
+               (fix:- value step)
+               (cons value result))
+         result))))
 \f
 ;;;; Flonums