代码之家  ›  专栏  ›  技术社区  ›  George Menoutis

将一组角色分配给一组人员

  •  1
  • George Menoutis  · 技术社区  · 8 年前

    我想写一个程序来解决这个问题 this game . 你不必为这个问题检查它。

    牧师、车夫、医生、小丑、机器人专家、安全官员

    他们共享以下角色:

    我的想法是以角色(人)的形式使用事实 核武器(牧师)。

    问题是,我怎样才能建立一个规则,当一个人有一个特定的角色,那么

    1. 同一个人没有其他角色;例如,如果是核武器(牧师),那么就不要拥抱(牧师)。(注:我希望我不会再遇到被切割怪物否定的人了!或者我应该创造可能的否定事实?)

    1 回复  |  直到 8 年前
        1
  •  2
  •   Cephalopod    8 年前

    我想如果你用这种形式的谓词会容易些 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) 格式,但它要求您显式列出所有角色并执行一些元编程。

    推荐文章