DCG ルールのセットがあります (この場合はドイツ語の人称代名詞):
% personal pronoun (person, case, number, genus)
ppers(1,0,sg,_) --> [ich].
ppers(1,1,sg,_) --> [meiner].
ppers(1,2,sg,_) --> [mir].
ppers(1,3,sg,_) --> [mich].
ppers(2,0,sg,_) --> [du].
ppers(2,1,sg,_) --> [deiner].
ppers(2,2,sg,_) --> [dir].
ppers(2,3,sg,_) --> [dich].
...
それらは意味的に関連しているため、関係のないルールではなく、それらをリスト (たとえば、人ごとにグループ化) に移動して、この情報を保持することは理にかなっています。これにより、物事が少しすっきりします。
ppers(1,sg,_,[ich, meiner, mir, mich]).
ppers(2,sg,_,[du,deiner,dir,dich]).
...
nth0()
次に、必要なケースがリスト内のインデックスである場合に、必要なアイテムを選択します。
しかし、プログラムをたどっていくと、ドイツ語の文章の正しい文法をチェックし、その部分が人称代名詞であるかどうかを調べようとすると、上位バージョン (単純なルール) を使用すると、Prolog がすべてのインスタンスをステップ実行しないことに気付きましたが、以下のリスト バージョンを使用すると、すべてのリストをクロールします。
リストと nth0 を使用すると、単純なルールよりもパフォーマンスが低下するということですか? それとも、Prolog トレーサは、リストの場合のように単純なルールのクロールを表示しないだけですか?
(私の質問を十分に明確にすることができれば幸いです。そうでない場合は、拡張します。)