Prolog中的逻辑OR

时间:2017-05-03 19:38:26

标签: prolog

我是Prolog学习的新手,并为该环境尝试了逻辑OR运算符:

%a.      
b.

foo:- a ; b.

我已评论a.尝试逻辑OR运算符,但它不起作用。如果您使用?-foo.进行查询,则会收到例外情况。 Prolog只检查第一个词而不是第二个词。有人可以帮帮我吗?

最好的问候。

2 个答案:

答案 0 :(得分:2)

由于a/0未定义,因此您收到异常。为了检查or-operator,你可以明确地将a定义为false。

a:-false.
b.

foo:- a ; b.

现在?- foo.给出答案true.

Prolog打造一个封闭的世界'假设。它只能评估定义的谓词的真实性或错误性。这意味着您需要至少一个在其左侧具有谓词的子句(或者事实,因为这将被解释为没有条件的clausel,因此没有右侧)。

答案 1 :(得分:1)

这基本上相当于:

foo :- a.
foo :- b.

第一个条款试图通过评估foo是否为真来评估a是否为真。 a甚至不存在于数据库中,因此您会收到错误。