在prolog中解决逻辑练习

时间:2013-01-05 10:50:16

标签: prolog

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

  鲍勃,汤姆,萨姆在银行担任会计,出纳和经理。   以下是关于它们的更多事实:

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

找出汤姆,萨姆和鲍勃的职业。

1 个答案:

答案 0 :(得分:0)

鉴于数据集较小,您可以使用生成和测试来解决,请参阅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.