Prolog失败驱动循环考试答案?

时间:2014-05-08 20:50:33

标签: prolog

以下是Prolog数据库中的两条规则:

 rule1 :-a, b, c, fail, d.

 rule1 :-e.

(i)'失败'的作用是什么?

(ii)在什么情况下会执行子目标d

(iii)在什么情况下会执行子目标e

我理解大部分问题,但是(ii)我无法看到何时执行d。你呢?

1 个答案:

答案 0 :(得分:3)

(i) fail/0谓词由Prolog提供。当它被调用时,它会导致规则失败。

我继续将a规则定义为e,以便您了解:

这是我的计划:

rule1 :-a, b, c, fail, d.

rule1 :-e.

a:-write('a').
b:-write('b').
c:-write('c').
d:-write('d').
e:-write('e').

当我执行rule1.时,我得到:

3 ?- rule1.
abce
true.

所以,这就是这个程序的作用:

  

写'a','b','c',然后第一个'rule1'失败(因此'd'不写)然后程序写'e'并结束。

(ii)正如您所看到的,规则d永远不会按规则执行,因为您定义的规则在执行子目标之前失败{ {1}}。为了执行它,你必须另外定义它。一个简单的例子是

d

但这会改变你的计划的核心。

(iii)在程序不变的情况下,运行查询rule1 :-a, b, c, d, fail.

时会执行规则e