Prolog中的逻辑异或
我对Prolog非常陌生,并试图用它解决一个逻辑难题。 我很难找到如何进行逻辑异或运算。 这里有一个非常简单的问题可以解释这种情况 假设某物只能是红色、绿色或白色中的一种。你会怎么写呢? 我尝试了下面的代码,但仍然显示Prolog中的逻辑异或,prolog,Prolog,我对Prolog非常陌生,并试图用它解决一个逻辑难题。 我很难找到如何进行逻辑异或运算。 这里有一个非常简单的问题可以解释这种情况 假设某物只能是红色、绿色或白色中的一种。你会怎么写呢? 我尝试了下面的代码,但仍然显示color(red)是正确的 color(X) :- X = red; X = green; X = blue. color(red) :- false. color(green) :- false. color(seafoam). 我希望我能最终运行颜色(Y),并将其等同于蓝色
color(red)
是正确的
color(X) :- X = red; X = green; X = blue.
color(red) :- false.
color(green) :- false.
color(seafoam).
我希望我能最终运行颜色(Y),并将其等同于蓝色 在大多数情况下,逻辑变量已经是独占的,因为它们只能绑定一次 您在这里定义了一个规则
color/1
,包含四个实体。当您使用未实例化的变量进行查询时,Prolog将依次尝试绑定其中的每一个变量:
?- color(X).
X = red ;
X = green ;
X = blue ;
X = seafoam.
现在你有了一点令人讨厌的向后错误,因为红色既是一种颜色,也不是一种颜色:
?- color(red).
true ;
false.
看起来像foo(…):-false.
的谓词在我看来通常是可疑的,因为Prolog的部分魔力在于生成解决方案,而显式失败在我看来就像玩引擎游戏一样
这里的问题是你把你对“颜色”的定义和你的东西可能的颜色混为一谈。如果我想说什么东西只能是红色、绿色或白色,我可能会说:
color(thing, red).
color(thing, green).
color(thing, white).
然后我仍然可以有颜色(蓝色)
,因为蓝色存在,即使我的东西不能是蓝色。当我想要生成事物的可能颜色时,color(thing,X)
给了我可能性color(thing,blue)
失败,并且color(X,blue)
永远不会生成thing
(虽然它可能会生成其他内容,但在本例中它不会)