; (或)Prolog中的运算符不会返回true,除非左侧为true,即使运算符的右侧本身返回true也是如此

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了; (或)Prolog中的运算符不会返回true,除非左侧为true,即使运算符的右侧本身返回true也是如此相关的知识,希望对你有一定的参考价值。

如果true运算符相对侧的两个规则中的任何一个在Prolog中成功,则我将尝试返回or。仅当发现or运算符左侧的内容为true时,它才有效。

似乎我的代码应根据http://www.cse.unsw.edu.au/~billw/dictionaries/prolog/or.html运行。

Case2在注释掉case1时起作用,因此它应该返回true,但由于它在运算符的右侧,所以不是。 (?)

[为了清楚起见,参数表示Person1Person2TypeOfCousinsTheyAreDegreesRemovedTheyAre。我正在尝试编写规则,以确定两个人是否先被表亲一度搬走。

这里是使用or运算符的行,如果右侧为true,则不会返回true

cousins(A, B, 1, 1) :- ( cousinsCase1(A, B, 1, 1) ; cousinsCase2(A, B, 1, 1) ).

我尝试过的其他方法:

((1)省略了or运算符并编写了两个相同的函数,但是每当调用它们而前一个失败时,我的程序就会崩溃。

cousins(A, B, 1, 1) :- var(FirstCousin),
                       cousin(A, FirstCousin, 1, 0),
                       parent(FirstCousin, B),
                       A = B.

cousins(A, B, 1, 1) :-  var(P1),
                        parent(P1, A),
                        cousin(P1, B, 1, 0),
                        A = B,
                        A = P1,
                        B = P1.

((2)我还尝试了一个if语句,如果第一个失败,则调用另一个函数,但是如果第一种情况再次失败,它将崩溃。

cousins(A, B, 1, 1) :- cousinsCase1(A, B, 1, 1) -> true ; cousinsCase2(A, B, 1, 1)).

如果第一个规则失败,是否有其他方法可以调用另一个规则?

如果Or或运算符的相对侧的两个规则中的任何一个在Prolog中成功,则我试图返回true。只有在or运算符左侧的内容为true时,它才有效。似乎...

答案

这是答案中的注释,因为它在注释中的格式不正确。

以上是关于; (或)Prolog中的运算符不会返回true,除非左侧为true,即使运算符的右侧本身返回true也是如此的主要内容,如果未能解决你的问题,请参考以下文章

Prolog不会返回值

Prolog 箭头运算符

Prolog =:= 运算符

Prolog DCG从字母数字字符构建/识别单词串

自定义 Prolog 算术函数

Prolog 中的谓词控制