这是我的代码:
binary_relations(x,y) .
binary_relations(y,z) .
asymmetric :-
not(symmetric) .
symmetric :-
binary_relations(X,Y) ,
binary_relations(Y,X) .
一切都是真的,程序正在以良好的方式运作,但如果我写的话:
binary_relations(x,y).
binary_relations(y,y).
binary_relations(y,z).
程序错误。
我需要做的是你可以看到的非对称二元关系。有人帮忙吗?我怎么能弄清楚这种情况呢?
首先,你必须写:非对称。
答案 0 :(得分:1)
考虑以下知识库,明确描述三个二元关系r1/2
,r2/2
和r3/3
。
r1(a,a).
r1(a,b).
r1(b,a).
r1(a,c).
r1(c,a).
r2(a,b).
r2(a,c).
r3(a,a).
r3(b,a).
r3(a,c).
很明显,r1/2
是对称的,r2/2
和r3/2
都是反对称的,r2/2
是三者中唯一的不对称。
让我们尝试用自然语言表达,然后使用逻辑。如果两个对象R
,X
使Y
为真,但R(X,Y)
为false,则关系R(Y,X)
是对称的。
symmetric(R):-
\+ (call(R, X, Y), \+ call(R, Y, X)).
如果没有两个对象(不一定是不同的),R
和R(X,Y)
都是真的,则关系R(Y,X)
是不对称的。
asymmetric(R):-
\+ (call(R, X, Y), call(R, Y, X)).
第三,如果R
和R(X,Y)
都为真,则R(Y,X)
关系是反对称的,意味着X
和Y
是同一个实体(在其他中)单词:没有两个不同的对象X
,Y
,R(X,Y)
和R(Y,X)
都是真的。
antisymmetric(R):-
\+ (call(R, X, Y), call(R, Y, X), Y \== X).
还有一些疑问:
?- symmetric(r1).
true.
?- symmetric(r2).
false.
?- symmetric(r3).
false.
?- asymmetric(r1).
false.
?- asymmetric(r2).
true.
?- asymmetric(r3).
false.
?- antisymmetric(r1).
false.
?- antisymmetric(r2).
true.
?- antisymmetric(r3).
true.