按位求反运算符(\)在prolog中做什么?

时间:2014-02-24 00:06:33

标签: prolog logic

我必须实现一些函数,其中一个函数是f = ~p / \ ~q。

我有以下内容:

p(a). p(b).
q(a). q(b). q(c).

我发现函数为:

f(X):-p(\X);q(\X).

当我验证它时(f(X)。,f(a)。,f(b)。,f(c)。)它总是返回false。

不应该为c返回true,因为c不是p?

谢谢!

2 个答案:

答案 0 :(得分:4)

(\)/1是用于按位补码的可评估函子。如果直接在参数中使用它,它只是一个未被解释的仿函数。仅使用(is)/2(>)/2和其他比较运算符执行评估。

在目前所有Prolog实施中,您将获得:

?- X is \ 1.
X = -2.

精细打印:符合ISO标准的系统可以自由定义\的值。也就是说,它是免费的,无论是使用2的补码还是其他表示。但是,只有系统使用2的补码。

答案 1 :(得分:1)

您对该公式的实施似乎存在缺陷。

您需要f : (not p) and (not q)

Prolog中可以使用运算符(\+)/1进行限制性否定,而结合(X和Y)使用逗号表示(,)/2

分号,(;)/2表示or,例如在下面的测试中,显示您对f(c)的初始假设也是错误的。

?- forall(member(X,[a,b,c,d]),(f(X)->writeln(y);writeln(n))).
n
n
n
y

(当然,f / 1翻译正确后)