如何在prolog中表示OR函数

时间:2016-02-28 05:33:36

标签: prolog logic logical-operators

我只是弄清楚如何运行gprolog并且prolog的新问题让我感到困惑。问题是指prolog中的二叉搜索树,假设

      8      
    /  \
   3   10  
  / \
 1   6

这里有两种类型的事实,当X是Y的左叶时左(X,Y),当X是Y的右叶时右(X,Y),所以我可以说左(3,8)并留下(1,3)和右(10,8)作为我的事实。在事实方面,当X高于Y时,实施上述规则(X,Y)?所以我想的是当Y是左边的X或Y是X的右边叶时,X高于Y.

我尝试了规则

  above(X,Y) :- left(Y,X); right(Y,X).

当我在gprolog中运行上面的查询(3,1)时。它问我是真的吗?当我按下回车然后它返回是,当我按下&#34 ;;"并且它返回no,因为系统继续搜索第二个目标" right(1,3)"。 我只是徘徊是否有任何可能它返回是,无论我按Enter或分号?

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您的代码(的相关部分)是

left(1,3).
above(X,Y) :- left(Y,X); right(Y,X).

您的查询是:

?-above(3,1).

查询首先返回true,因为已达到目标。然后它会询问您是否要查找其他结果(分号),您告诉它继续前进并寻找其他方式来证明您的目标,并且它会回答没有别的办法(因此"没有")。

您是否在询问是否有办法改变gprolog的顶级行为,以便它回答"是"到第二个问题?

理论上,可以重新实现自己的Prolog编译器并使其输出" yes"什么意思说"不",但为什么会这样呢?除此之外,不,你不能改变它。