0

我正在尝试学习 Prolog,但我在逻辑练习方面遇到了一些麻烦。

Bob、Tom、Sam 在银行担任会计师、出纳员和经理。以下是关于它们的更多事实:

  • 如果 Sam - 收银员,而不是 Tom - 经理。
  • 如果山姆 - 经理,汤姆 - 会计师。
  • 如果汤姆不是收银员,鲍勃 - 不是经理。
  • 如果 Bob - 会计师,Sam - 经理。

找出汤姆、山姆和鲍勃的职业。

4

1 回答 1

0

给定小数据集,您可以使用generate 和 test解决,请参阅permutation /2 。为了轻松翻译每条规则,请使用工作人员名称命名一个变量。我将只显示第一个条件

q([sam=Sam, tom=Tom, bob=Bob]) :-
  ...,
  ( Sam = cashier -> Tom = manager ; true ),
  ....

有了这个,我得到了这些解决方案

?- q(X).
X = [sam=accountant, tom=cashier, bob=manager] ;
X = [sam=manager, tom=accountant, bob=cashier] ;
X = [sam=accountant, tom=manager, bob=cashier] ;
false.
于 2013-01-05T22:29:25.047 回答