;; maybe one way of doing OO-like stuff using records?
(include "lib/core.scm")
(include "lib/pair.scm")
(define (make-counter)
(let ((val 0))
(define (next)
(let ((r val))
(set! val (+ val 1))
r)
)
{next=next}
))
(define (n-counters n)
(let loop ((n n) (l (list:nil)))
(if (zero? n)
l
(loop (- n 1) (list:cons (make-counter) l)))))
(printn (n-counters 5))
(let ((x (make-counter))
(y (make-counter)))
(printn (x.next))
(printn (x.next))
(printn (x.next))
(printn (x.next))
(printn (x.next))
(printn (x.next))
(printn (y.next))
(printn (y.next))
(printn (y.next))
(printn (y.next))
(printn (y.next))
(printn (y.next))
)