2009/08/11

[scheme]iotaっぽいの書いてみた

昼過ぎは毎日猛烈に眠いので今日は眠気覚ましにsrfi-1のiota書いてみた。
(こんなんだったかなーと思い出しながら)
download


;; (iota cnt init inc
(define iota
  (lambda (cnt . opt)
    (letrec ((init (if (null? opt)
                       0
                       (car opt)))
             (inc (cond
                   ((or (null? opt)
                        (null? (cdr opt))) 1)
                   (else (cadr opt))))
             (iter (lambda (cnt init inc ret)
                     (if (zero? cnt)
                         '()
                         (cons ret
                               (iter (- cnt 1)
                                     init
                                     inc
                                     (+ ret inc)))))))
      (iter cnt init inc init))))

(iota 10 0 1)
;; => (0 1 2 3 4 5 6 7 8 9)
(iota 10 1)
;; => (1 2 3 4 5 6 7 8 9 10)
(iota 15)
;; => (0 1 2 3 4 5 6 7 8 9 10 11 12 13 14)
(iota 10 0 2)
;; => (0 2 4 6 8 10 12 14 16 18)

0 件のコメント:

コメントを投稿