私は、Prologのnot predicateの宣言的なビューと少し混乱していると思います。
私は、この方法で単に述語ではなく実装できることを持っています:
not(P) :- P, !, fail;
true.
ここで、P は述語であり、P ではなく、P が TRUE の場合は FALSE、P が偽の場合は TRUE です。
私が読むことができるブラトコの本を読む:
Goal が成功した場合、not(Goal) は失敗し、それ以外の場合は not(Goal) が成功します。
このコードスニペットを解釈しようとして多くの問題を抱えているかもしれませんが、これは宣言型パラダイムとロジックを超えて、ある種の手続き型パラダイムに入るように思えます
私には、カットと失敗述語述語によって実装されたif{} else{}の形式のように思えます...私は次のように読みました。
P は、TRUE または FALSE のみのブール述語です。
IF P が TRUE の場合、強制的に失敗し (つまり、not(P) が FALSE である)、他の応答を持たないようにバックトラックを回避します。
ELSE P は FALSE であり、not P は TRUE です。
私の解釈が間違っているのか、推論に何かが欠けているのか、それともばかげた質問で多くの問題を抱えているのかわかりません...