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