これは疑似宿題です(追加のクレジットです)。単語を含む(別の場所に格納されている)行を指す単語のインデックスであるBSTがあります。and(&)and or(|)を組み合わせることができるように、S式を使用して検索する方法を実装する必要があります。
コマンドプロンプトで、ユーザーは次のように入力できます。
QUERY ((((fire)&(forest))|((ocean)&(boat)))&(water))
基本的に、これは、fire、forest、waterという単語を含むすべての行と、海、ボート、および水を含むすべての行を返す必要があります。
私が本当に助けを必要としているのは、実際のコードよりも式を適切に表現するために、ノードを解析してツリーに挿入するためのロジックです。私が理解できる唯一のことは、式の各単語の一連の行を返すことです。次に、それが「or」または「and」操作であるかどうかに応じて、それらのセットに対して和集合または交差型の操作を実行して、新しいセットを作成し、それをツリーに渡します。
式を含む行を解析する方法に少し迷っています。いくつか考えた後、サブ式の1つから「遠い」方が、私のs式ツリーでより高いはずであるように見えますか?式を解析してツリーに挿入する限り、正しい方向にプッシュできれば大丈夫だと思います。
上記のクエリ用に思いついたサンプルツリーは、次のようになります。
&
/ \
| water
/ \
& &
/ \ / \
fire forest ocean boat
これは、火がすべて火を含む行のセットを返し、森がすべて森を含む行のセットを返すため、理にかなっています。次に、「&」レベルで、これら2つのセットを取得し、両方のセットに含まれる行のみを含む別のセットを作成します。これにより、火と森の両方を含む行のみを含むセットが得られます。
私の他のつまずきは、構文解析のハードルを克服した後、ツリー内のすべてを表現する方法です。ExpTree(BST)のノードとして機能するExpTreeNodeクラスがあり、次に演算子とオペランドの2つのサブクラスがありますが、これが適切なアプローチかどうかはわかりません。