2

最初の部分が 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.

教えてください、正しく行う方法は?

4

2 に答える 2

5

(is)/2算術を実行するための述語です。テストが算術に関するものであったとしても、 の使用(=:=)/2が推奨されます ((is)/2は変数のインスタンス化に使用されるためです。変数値をチェックするために使用すると、誤用されます。OTOH(=:=)/2は数値の比較に使用されます)。

しかし、ここでのテストは算術ではなく、何かが真かどうかを知ることです。そのための演算子があり、特定の項が証明可能かどうかをチェックします(\+)/1

f_test :-
    f(x),
    \+ f(y).
于 2012-05-21T12:01:48.003 に答える
1

あなたが試すことができます

f_test :- f(x), \+f(y).
于 2012-05-21T12:00:43.350 に答える