以下是Prolog数据库中的两条规则:
rule1 :-a, b, c, fail, d.
rule1 :-e.
(i)'失败'的作用是什么?
(ii)在什么情况下会执行子目标d
?
(iii)在什么情况下会执行子目标e
?
我理解大部分问题,但是(ii)我无法看到何时执行d
。你呢?
答案 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