Kimura Fuyuki
fuyuk****@hadal*****
2003年 1月 20日 (月) 16:09:55 JST
たびたびすみません。あまりにもバグだらけだったので書き直しました。 あと、put, del から upd!, del!, ins! に変えてみました(ますますSQLみた いですが。それに引数多すぎ)。 (define-method get ((self <dictionary>) key) (define (iteratee end? next ins! del! upd!) (cond ((end?) (error "dictionary doesn't have an entry for key" key)) (else (cdr (next))))) (call-with-iterator self iteratee key)) (define-method get ((self <dictionary>) key default) (define (iteratee end? next ins! del! upd!) (cond ((end?) default) (else (cdr (next))))) (call-with-iterator self iteratee key)) (define-method put! ((self <dictionary>) key val) (define (iteratee end? next ins! del! upd!) (cond ((end?) (ins! key val)) (else (next) (upd! val)))) (call-with-iterator self iteratee key)) (define-method exists? ((self <dictionary>) key) (define (iteratee end? next ins! del! upd!) (not (end?))) (call-with-iterator self iteratee key)) (define-method delete! ((self <dictionary>) key) (define (iteratee end? next ins! del! upd!) (cond ((end?) #f) (else (next) (del!) #t))) (call-with-iterator self iteratee key)) あと、こういうことを実際にやるとしたら、get/put! ではなく object-apply を使ったほうがいいと思います。理由は次のとおり。 - get/put という名前はほかの意味で使われることが多い - (ref obj key) は (ref obj slot) とぶつかる -- 木村 冬樹