2

大量のデータ マップがあり、各マップをネストされた方法で分類する必要があります。

つまり、与えられたアイテムは A または B (関数によって決定される) である可能性があり、B の場合は C または D (別の関数によって決定される) である可能性があり、以下同様です。各段階で、分類に関連するより多くのデータが各マップに追加される場合があります。分類を行う関数自体は非常に複雑であり、決定を行うために追加のデータを取り込む必要がある場合があります。

自己再帰的マルチメソッドは、これを行うコードを構成する良い方法でしょうか? アイテムについてこれまでに決定された最も具体的なタイプで発送するか、それ以上何もできない場合は現在の最良の分類を返します.

単一の分類関数内にネストされた if を使用して目的の効果を得ることができましたが、まあ、それは醜いです

マルチメソッドはここに適していますか、それとも物事を複雑にしすぎていて、コードを構造化するより簡単な方法がありませんか?

4

2 に答える 2

1

ここではマルチメソッドが役立つようです。すべての複雑さはディスパッチ機能にあると思いますか? トップレベルを分類したら、別のインスタンスをトリガーする詳細情報を使用してマルチメソッドを再度起動しますか?

これを考える別の方法は、入力をたどるのではなく、決定木をたどることに基づいてそれを行うことです。clojure.zip を使用して分類関数のツリーをたどることが興味深い解決策になるのではないかと思います。各ノードの分類関数は、次にツリーをトラバースする方法 (どの子に移動するか) を教えてくれます。clojure.zip は必ずしも必要ではありませんが、既にツリー ナビゲーションが含まれています。

于 2011-03-01T21:58:54.327 に答える
0

マルチメソッドは、問題の複雑さが必要な場合にこのレベルのディスパッチを可能にするため、優れています。それがあなたが望むものをするなら、私はそれのために行くと言います。

おそらく、役立つisa階層を構築できます

于 2011-03-01T21:45:41.810 に答える