gt(ace,ten).
gt(ten,king).
gt(king,queen).
gt(queen,jack).
gt_(X,Y) :-
( gt(X,Z1), gt(Z1,Z2), gt(Z2,Z3), gt(Z3,Y) ) ;
( gt(X,Z1), gt(Z1,Z2), gt(Z2,Y) ) ;
( gt(X,Z1), gt(Z1,Y) ) ;
gt(X,Y)
.
gt
的意思是“大于”并且应该是及物性的。这意味着例如 gt_(ace, jack)
应该产生 true
。
上面的显式实现是有效的,但是将所有可能的传递间接写出来显然不能令人满意。
更好更简洁的写作方式是什么
gt_
?
您之前的代码方向正确,除了您将使用事实作为直接关系并使用不同名称的规则作为递归步骤:
gt(ace,ten).
gt(ten,king).
gt(king,queen).
gt(queen,jack).
gt_(X,Y) :- ( gt(X,Z1), gt_(Z1,Y) ) ; gt(X,Y) .
示例运行:
?- gt_(X,Y).
X = ace,
Y = jack ;
X = ace,
Y = queen ;
X = ace,
Y = king ;
X = ten,
Y = jack ;
X = ten,
Y = queen ;
X = king,
Y = jack ;
X = ace,
Y = ten ;
X = ten,
Y = king ;
X = king,
Y = queen ;
X = queen,
Y = jack.
?- gt_(ten,ace).
false.