Shiro Kawai
shiro****@lava*****
2014年 6月 12日 (木) 06:54:48 JST
性能を気にしないなら、ハッシュテーブルへの直接アクセスにこだわらず、 独自のコンテナタイプに包んでしまうって手もありますね。 (define-class <associative-map> () ((table :init-form (make-hash-table 'eq?)))) (define-method ref ((m <associative-map>) key) (hash-table-get (~ m'table) key '())) 他の多くのLLではハッシュテーブルを「組み込みのkey-valueコレクション型」 という扱いにしてて、色々なAPIがそれを受け取ったり返したりするので ハッシュテーブルそのものに汎用メソッドが適用できるのは重要なんですが、 CLやSchemeの文化ではハッシュテーブル自体はわりと低いレベルの部品で 「必要に応じて適切なコンテナを作るべし」っていう感覚があるようにも 思います。APIではkey-valueコレクションとしてalistを取るものが 多かったりしますし。 実用上、あまり実装の詳細を気にせず使える汎用マップ型があると いいなというのは私も思うんですが、ハッシュテーブルそのものを その位置に置いてしまうのはちょっと短絡的かなという気もしてるんですよね。 汎用マップ型を作るとして、エントリのないキーが渡された時の振る舞いを 統一するとしたらどういう動作が良いだろう。 --shiro