如何摆脱Singleton变量错误?

时间:2018-10-04 20:45:58

标签: prolog

我应该在Monty Python电影中实现一个小序幕程序,人们在争论这女人是否是女巫。根据说法,巫婆被烧了,但是木头也被烧了,木头也漂浮了,但是鸭子也漂浮了,所以,如果某人的体重和鸭子一样,那就是木头做的,因此,她就是一个巫婆。

基于此,我提出了以下建议:

There is no directive with "exportAs" set to "ngModel"

但是当我想检查X是否是巫婆时,可以尝试使用witch(X)。它实际上打印出“ true”,表明该女人是女巫,但我还收到一条witch(X) :- burns(X), female(X). burns(X) :- wooden(X). wooden(X) :- floats(X). floats(X) :- sameWeight(duck, X). female(X). sameweight(duck, X). 错误消息。很明显,我在某个地方有一个错误,我想修复它。

1 个答案:

答案 0 :(得分:3)

这些是警告。它指定在子句中使用变量一次。在以下情况中的X就是这种情况:

female(X). 
sameweight(duck, X).

现在,这有点“奇怪”了。变量通常用于将值从头传递到主体,或在主体中的两个谓词调用之间传递。但是这里您只使用一次X

如果您“不在乎”该值,则在Prolog中使用下划线_)。下划线是一个“匿名变量”:如果在同一子句中使用两个下划线,则它们是两个不同变量。

所以您可以像这样修复它:

female(_). 
sameweight(duck, _).

请注意,现在您已经写到一切female,并且所有事物的权重都与duck相同。