ある事実を別の事実に関連付け、指定された停止点まで継続するための述語を取得しようとしています。
たとえば、誰が誰から荷物を受け取り、どこから荷物を受け取ったのかを最後まで知りたい物流記録を作成しているとします。
プロローグ コード
mailRoom(m).
gotFrom(annie,brock).
gotFrom(brock,cara).
gotFrom(cara,daniel).
gotFrom(daniel,m).
gotFrom(X,Y) :- gotFrom(Y,_).
だから私が述語 gotFrom でやろうとしているのは、あなたが開始した時点からリストを再帰的に下に移動し (例: gotFrom(brock,Who))、m で指定された最後に到達することです。メールルーム。
残念ながら、この述語を実行すると、次のように表示されます。
Who = annie.
Who = brock.
Who = cara.
etc.etc....
私はすべてを踏み出そうとしましたが、ブロックからアニー、カーラ、そして無限の真を循環するまでどこに行くのかわかりません. 関数のワイルドカード (_) と関係があるような気がしますが、述語がプログラム内の次の事実を検索するために、関数のその部分を他にどのように表現できるかわかりません。最後までスキップ。
プログラムでバックカット (!) を使用しようとしましたが、同じエラーが発生します。
どんな助けでも大歓迎です。コードは必要ありません。何が間違っているのかを知りたいだけなので、正しい方法を学ぶことができます。
ありがとう。