2010/04/05

let-optionals*, define-values

クロージャを複数返すの見て、なるほど・・・と。
;; let-optionals*
(define (make-counters . args)
(let-optionals* args ((seed 0)
(step 1))
(let ((x seed))
(values (lambda ()
(set! x (+ x step)))
(lambda ()
(set! x (- x step)))))))
(use srfi-8) ; define-values
(define-values (inc dec)
(make-counters))
(inc)
(dec)
(define-values (dec2 inc2)
(make-counters 100 -2))
(inc2)
(dec2)


プログラミングGauche

0 件のコメント:

コメントを投稿