如何写及物谓词?

问题描述 投票:0回答:1
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_

prolog
1个回答
0
投票

您之前的代码方向正确,除了您将使用事实作为直接关系并使用不同名称的规则作为递归步骤:

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.
© www.soinside.com 2019 - 2024. All rights reserved.