2017-07-14 89 views
4

说我有一个看起来像这样的数据库:是否有可能在生产规则中引用事实?

regular_player('Xi'). 
regular_player('Doyle'). 

expert_player('Houdini'). 
expert_player('Gandhi'). 

% don't allow expert players to be paired together 
start  --> good_pair. 
good_pair --> (player, expert) ; (expert, player) ; (player, player). 
player  --> ['Xi'] ; ['Doyle']. 
expert  --> ['Houdini'] ; ['Gandhi']. 

是否有可能从生产规则引用的事实,以消除重复我这里。

回答

4

您可以消除事实并改用playerexpert规则。

或者,限定

player --> [P], { regular_player(P) }. 
expert --> [E], { expert_player(E) }. 

至于其做法是适当的是依赖于应用的。

+0

这是一个微不足道的例子,在实际的代码中,我更喜欢原子在事实中,而不是生产规则,因为它们将在别处使用。 – paxos1977

+0

@ paxos1977我同意。这将取决于应用哪种方法是理想的。 – lurker

相关问题