; (或)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
,但由于它在运算符的右侧,所以不是。 (?)
[为了清楚起见,参数表示Person1
,Person2
,TypeOfCousinsTheyAre
,DegreesRemovedTheyAre
。我正在尝试编写规则,以确定两个人是否先被表亲一度搬走。
这里是使用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也是如此的主要内容,如果未能解决你的问题,请参考以下文章