最初の部分が true で、2 番目の部分が false の場合、テストは true を返す必要があります。
そのようなことをしようとしました:
f_test :- f(x), % 1st part
f(y) is false. % 2nd part
しかし、それは私にエラーを与えます:
ERROR: is/2: Arithmetic: `false/0' is not a function.
教えてください、正しく行う方法は?
最初の部分が true で、2 番目の部分が false の場合、テストは true を返す必要があります。
そのようなことをしようとしました:
f_test :- f(x), % 1st part
f(y) is false. % 2nd part
しかし、それは私にエラーを与えます:
ERROR: is/2: Arithmetic: `false/0' is not a function.
教えてください、正しく行う方法は?
(is)/2
算術を実行するための述語です。テストが算術に関するものであったとしても、 の使用(=:=)/2
が推奨されます ((is)/2
は変数のインスタンス化に使用されるためです。変数値をチェックするために使用すると、誤用されます。OTOH(=:=)/2
は数値の比較に使用されます)。
しかし、ここでのテストは算術ではなく、何かが真かどうかを知ることです。そのための演算子があり、特定の項が証明可能かどうかをチェックします(\+)/1
。
f_test :-
f(x),
\+ f(y).
あなたが試すことができます
f_test :- f(x), \+f(y).