Prolog 询问几个条件中的一个

Prolog 询问几个条件中的一个,prolog,boolean-logic,unification,Prolog,Boolean Logic,Unification,我意识到这是非常基本的,但我不能从Prolog教程中解决这个问题,所以我希望这里的人能帮助我解决我的问题 我有一个术语,如果以下条件之一适用,则该术语为真: answer --> Var, a([Att1],[Var1]), a([Att2],[Var2]), a([Att3],[Var3]), { [one, two, three] = [Att1, Att2, Att3] -> Var1 = Var; % first condition

我意识到这是非常基本的,但我不能从Prolog教程中解决这个问题,所以我希望这里的人能帮助我解决我的问题

我有一个术语,如果以下条件之一适用,则该术语为真:

answer -->
  Var,
  a([Att1],[Var1]),
  a([Att2],[Var2]),
  a([Att3],[Var3]),
  {
    [one,   two,   three] = [Att1, Att2, Att3] -> Var1 = Var; % first condition
    [one,   three, two]   = [Att1, Att2, Att3] -> Var1 = Var; % second condition
    [two,   one,   three] = [Att1, Att2, Att3] -> Var2 = Var; % third condition
    [three, one,   two]   = [Att1, Att2, Att3] -> Var2 = Var; % fourth condition
  }
所有属性和变量都有一个固定的值,如果“{}”部分中的任何条件都满足,我想提供“答案”——但由于某种原因,它不起作用。问题是,如果我只检查其中一个条件,比如第一个条件,它会按预期工作。但我不想复制/粘贴规则4次,因为我没有得到一个逻辑“或”来正常工作

换句话说,如果我编码了完全不同的东西,第一个条件是:检查Att1是否等于1,Att2是否等于2,Att3是否等于3。如果是这种情况,还要确认Var1等于Var中的值。如果不是,请检查是否可以解决任何其他条件


编辑:原来我有一个“;”代码中的内容太多。

这不起作用吗<代码>[1,2,3,Var1]=[Att1,Att2,Att3,Var]->正确对,我可以这样写。我是否需要将->设置为true,或者我可以将条件链接到@Capelical edit:我用那一行测试了它,如果我只使用一个条件,它仍然是好的,但是如果我使用all for none,它就不起作用了。这取决于。。。从您的描述来看,似乎是
应该可以。当你的语法有其他备选答案时,你想让它回溯吗?@capelical我不确定回溯是否是正确的词。如果第一个条件在某个点失败,我希望它在下一个点上尝试。我可以用每个条件中的一个来做4次相同的规则。如果现在可以了,谢谢你的帮助。我刚刚注意到第四个条件也以“;”结尾。。哑错误