kiyo_hikoのブログ

メモ+日記?

CLでiotaその後

↓でSchemeのiotaを真似した関数を作ったけどその返却値を勘違いしてたらしい。

http://kiyohikou.hateblo.jp/entry/2013/05/29/175726

てっきり

(iota to from step)

だと思っていたところ、正しくは、

Function: iota count :optional (start 0) (step 1)
[SRFI-1] startから始まり、stepずつ増加する、 count 個の要素からなる数値のリストを返します。

http://practical-scheme.net/gauche/man/gauche-refj_44.html

書いた。これでいいのかな

doマクロ使用版

(defun iota2 (count &optional (start 0) (step 1))
  (do ((i 0 (1+ i))
       (n start (+ n step))
       (ns nil))
      ((= i count) (nreverse ns))
    (push n ns)))

再帰版

(defun iota3 (count &optional (start 0) (step 1))
  (labels ((tco (i n ns)
                (if (= i count)
                    ns
                  (tco (1+ i) (+ n step) (push n ns)))))
    (nreverse (tco 0 start nil))))