私はPrologを初めて使用し、この割り当てを与えられました。
私のコードは次のとおりです。
relatives(cindy,tanya).
relatives(tanya,alan).
relatives(alan,mike).
relatives(kerry,jay).
relatives(jay,alan).
isRelated(X,Y):-
relatives(X,Y).
isRelated(X,Y):-
relatives(X,Z),
isRelated(Z,Y).
十分に単純です。これは、次の場合を示しています。
?- isRelated(cindy,mike).
Prologはtrueを返します。今、私はそれを真に戻す方法に固執しています:
?- isRelated(mike,cindy).
isRelated(Z、Y)がfalseを返し、XとYを切り替えて、isRelatedを再度実行するなどのアイデアを考え出そうとしてきました。しかし、Prologがそのようなアイデアを許可するかどうかはわかりません。ヒントやアドバイスをいただければ幸いです。ありがとう!
更新:* ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * **
だから私は追加しました:
isRelated(X,Y):-
relatives(X,Y);
relatives(Y,X).
それは「直接的な」関係を満足させるでしょう、しかし単に私はそれが間接的な関係を満たさないことを知りました。
最初のクエリの場合、私は本当に次のようなことをしたいと思います。
isRelated(mike,cindy)
失敗した場合は、XとYを切り替えて、その逆が当てはまるかどうかを確認してください。
isRelated(cindy,mike)
それは間違いなく真になります。Prologでこれを構文的に行う方法がわかりません。