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)
http://practical-scheme.net/gauche/man/gauche-refj_44.html
[SRFI-1] startから始まり、stepずつ増加する、 count 個の要素からなる数値のリストを返します。
書いた。これでいいのかな
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))))