;; -*- Mode: Irken -*- (define (set-class) (define (in self x) (let loop ((l self.list)) (match l with () -> #f (hd . tl) -> (if (eq? hd x) #t (loop tl))))) (define (add self x) (if (self::in x) ;; note inline #u (set! self.list (list:cons x self.list)))) (define (get self) self.list) (define (iterate self p) (let loop ((l self.list)) (match l with () -> #u (hd . tl) -> (begin (p hd) (loop tl))))) (let ((methods {in=in add=add get=get iterate=iterate})) (define (new l) {o=methods list=l}) new )) (define set-maker (set-class))