Prologで「既婚」を定義するのにこれがうまくいかないのはなぜですか?
married(X,Y):-married(Y,X).
この種の循環述語は許可されていませんか? どうすれば修正できますか?
ありがとう
Prologで「既婚」を定義するのにこれがうまくいかないのはなぜですか?
married(X,Y):-married(Y,X).
この種の循環述語は許可されていませんか? どうすれば修正できますか?
ありがとう
構文が間違っていたらすみません。Prolog で遊んでからしばらく経ちました。
典型的な解決策は、次のように節に別のレベルを導入することです。
married(X, Y) :- wife(X, Y).
married(X, Y) :- wife(Y, X).
代わりに、妻句を使用して関係を指定します。
wife(jane, bob).
wife(alice, john).
?- married(jane, X).
X = bob
詳細については、CSc 8710、Deductive Databases and Logic Programming、第 6 章 - Logic and databasesの 6.5 - Special Relations を参照してください。
私が理解しているように、基本的な問題は、循環定義が許可されている場合、結果の言語は自己一貫性がありますが、直感に反することが多い微妙な結果が生じる可能性があることです。また、効率に関する考慮事項もあります (循環定義では余分なオーバーヘッドが発生します)。
より多くの説明とかなりの数の異なる視点については、この詳細な議論を参照してください。