2010/03/25

cycle

リストを受け取り、そのリストの要素を先頭から順に返す(全ての要素を返したら、再びリストの先頭を返す)関数を返す関数cycle
こうかな。
;; cycle
;; Scheme:初心者の質問箱:log00 - http://goo.gl/Clv8
(define (make-cycle ls)
(let ((rest ls))
(lambda ()
(begin0
(car (if (null? rest)
(begin
(set! rest ls)
rest)
rest))
(set! rest (cdr rest))))))
(define c (make-cycle '(1 2 3)))
(dotimes (i 5)
(print (c)))
;; 1
;; 2
;; 3
;; 1
;; 2
;; #t
; again
(define (make-cycle ls)
(let ((l ls))
(lambda ()
(begin0
(car l)
(set! l (if (null? (cdr l))
ls
(cdr l)))))))
(define c (make-cycle '(1 2 3)))
(dotimes (i 5)
(print (c)))
;; 1
;; 2
;; 3
;; 1
;; 2
;; #t
view raw cycle.scm hosted with ❤ by GitHub

circular-listってのがあるのか。中はどうなってんだろう。
let1, if-let1, rlet1, and-let*, fluid-let ...
The Seasoned Schemer

0 件のコメント:

コメントを投稿