我正在尝试编写一个程序来解决this game。您无需针对这个问题进行检查。
问题是,有6个人: 牧师,首席工程师,医学博士,小丑,机器人专家,SecurityOfficer
他们扮演以下角色: NukeOp,Facehugged,Cyborg,Changeling和2 x Ok
我的想法是以角色(人)的形式使用事实,例如 NukeOp(牧师)。
问题是,我该如何创建一条规则,规定当一个人扮演特定角色时,
如果可能的话,我想给出一个答案,使我能够以正确的方式思考,而无需提供完整的解决方案,从而从建模和记忆语言的乐趣中解脱出来:)
答案 0 :(得分:2)
我认为如果您使用hasRole(Person, Role)
形式的谓词会更容易。
要确保一个人只有一个角色:
hasSingleRole(Person, Role) :- hasRole(Person, Role), \+ ((hasRole(Person, Role2), Role \= Role2)).
同样,要确保角色是唯一的:
hasUniqueRole(Person, Role) :- hasRole(Person, Role), \+ ((hasRole(Person2, Role), Person\= Person2)).
可以使用role(Person)
格式执行相同的操作,但是它要求您明确列出所有角色并进行一些元编程。