私はPrologに新しいです。私は、ある人物が他の人の友人か友人かどうかを調べるための質問を書こうとしています。Prolog、友達の友達
私はこのようないくつかの事実を持っている:私はこのような何かをした
visible(joe, ann).
true
:
friends(joe, [john, ann, pete, ellen,
maria, jose, bruno, ali, jing, yang]).
friends(john, [rick]).
friends(ellen, [mia, xing, jun, maria]).
friends(maria, [pete, ellen, zhang, jose, serena]).
friends(serena, [ali, rick, zhang, mia]).
friends(jose, [maria, jose, bruno, ali, jing]).
私の目標は、このようなクエリ書くことです
visible(X,Y) :- friends(X,[Y|T]); member(Y,T).
visible(X,Y) :- visible(X,Z), visible(Z,Y).
member(X,[X|T]).
member(X,[H|T]) :- member(X,T).
をしかし、それは無限ループになります。私はベースケースを書く方法を知らない。
この関係はループを持つグラフです。友人の友人を再帰的に見つけ出すにはどうしようもありませんか?
'友人(X、Y):あなたも、このプロパティをしたい場合は、
クエリを追加する必要があります[この定義](https://stackoverflow.com/q/26946133/772868)を使用して、可視(X、Y): - 閉包(friend、X、Y) – false
エラー:未定義プロシージャ:閉包/ 3、例外:(9)閉鎖(friend、a、b)このエラーが発生しましたか?私が可視(a、b)を照会するとき。 –
上記のリンクで 'closure/3'の定義を使う必要があります! – false