在Prolog中,当在谓词链中定义顺序时,如何进行比较?

在Prolog中,当在谓词链中定义顺序时,如何进行比较?,prolog,transitive-closure,knowledge-management,Prolog,Transitive Closure,Knowledge Management,具有以下定义: biggerThan(a,b). biggerThan(b,c). biggerThan(c,d). 如何定义规则is_biggerX,Y,使得is_biggera,c和is_biggera,d将返回true 此外,我对Prolog还很陌生。标题是否正确地解决了这个问题,如果没有,我应该如何说是?简单地将is\u biger定义为biggerThan关系的传递闭包: biggerThan(a,b). biggerThan(b,c). biggerThan(c,d). is_b

具有以下定义:

biggerThan(a,b).
biggerThan(b,c).
biggerThan(c,d).
如何定义规则is_biggerX,Y,使得is_biggera,c和is_biggera,d将返回true

此外,我对Prolog还很陌生。标题是否正确地解决了这个问题,如果没有,我应该如何说是?

简单地将is\u biger定义为biggerThan关系的传递闭包:

biggerThan(a,b).
biggerThan(b,c).
biggerThan(c,d).

is_bigger(X, Y) :- biggerThan(X, Y).
is_bigger(X, Y) :- biggerThan(X, Z), is_bigger(Z, Y).

关系R的传递闭包恰好是最小的关系X,因此R包含在X中,这是定义的第一个子句,并且X=rox,这是第二部分。因此,以上基本上是一个可能的定义。

标题可以,但可以编辑“if”->“is”。递归地定义更大/2。想想你的is_biggera,d.的例子。为什么是真的?这是真的,因为biggerThana,b是真的,递归地是_biggerb,d是真的。简单的例子是,因为biggerThana,b是真的。除了直接为您编写谓词,我现在已经完成了所有操作;