我正在尝试学习Prolog,我在逻辑练习方面遇到了一些麻烦。
鲍勃,汤姆,萨姆在银行担任会计,出纳和经理。 以下是关于它们的更多事实:
- 如果Sam - 收银员,而不是Tom - 经理。
- 如果Sam - 经理,Tom - 会计师。
- 如果汤姆不是收银员,鲍勃 - 不是经理。
- 如果Bob--会计师,Sam - 经理。
找出汤姆,萨姆和鲍勃的职业。
答案 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.