Kimura Fuyuki
fuyuk****@hadal*****
2003年 1月 20日 (月) 10:32:02 JST
少しイメージが固まってきたので追加。 次のようなイテレータ構築メソッドを仮定します。 Generic function: call-with-iterator dictionary proc keys... コレクションの call-with-iterator との違いは、 - keys に指定されたキーを持つ要素について繰り返す(無指定なら全要素) - proc は4個の引数を取る。 最初の2個はコレクションのものと同じで、 あとの2個は小黒さんのメールにある put, del と同じ。 これで get, put!, exists?, delete! の4点セットを書いてみます。 (define-method get ((self <dictionary>) key) (define (iteratee end? next put del) (when (end?) (error "dictionary doesn't have an entry for key" key)) (cdr (next))) (call-with-iterator self iteratee key)) (define-method get ((self <dictionary>) key default) (define (iteratee end? next put del) (if (end?) default (cdr (next)))) (call-with-iterator self iteratee key)) (define-method put! ((self <dictionary>) key val) (define (iteratee end? next put del) (unless (end?) (put val))) (call-with-iterator self iteratee key)) (define-method exists? ((self <dictionary>) key) (define (iteratee end? next put del) (not (end?))) (call-with-iterator self iteratee key)) (define-method delete! ((self <dictionary>) key) (define (iteratee end? next put del) (unless (end?) (del val))) (call-with-iterator self iteratee key)) どんなもんでしょうね? -- 木村 冬樹