廉师友<<人工智能>>作业二参考答案
(补充习题)判断以下公式对是否可合一,若可合一,则求出最一般的合一:
(3)
解:令。
差异集为,做替换,则
差异集为,做替换,则
已经是单元集,所以原子句集可合一,且最一般合一为:。
(4)
解:令。
差异集为,做替换,则
差异集为,做替换,则
差异集为。由于其中不存在变量,所以原子句集不可合一。
(5)
解:令。
① 差异集为,做替换,则
已经是单元集,所以原子句集可合一,且最一般合一为:。
P86 第6题
解:首先定义谓词:
表示 录取x
将题设的条件表示成谓词公式如下:
(1)
(2)
(3)
而要证的结论为:
将题设和结论的否定化为子句集得:
(1)
(2)
(3)
(4)
归结得:
(5) (1)(2)
(6) (3)(5)
(7)NIL (4)(6)
得证。
3.P86题7张某被盗,公安局派出五个侦察员去调查.研究案情时,侦察员A说”赵与钱至少有一人做案”; 侦察员B说”钱与孙至少有一人做案”; 侦察员C说”孙与李至少有一人做案”; 侦察员D说”赵与孙有一人与此案无关”; 侦察员E说”钱与李有一人与此案无关”;如果这五个侦察员的话都是可信的,试用归结演绎推理求出谁是盗窃犯.
解:首先定义谓词:
表示 x作案
则已知的前提可以表示为:
(1)
(2)
(3)
(4)
(5)
待求解的问题为:
(6)
上面已经是子句集,直接进行归结:
(7) (1)(6)
(8) (4)(7)
(9) (2)(8)
(10) (6)(9)
所以,是罪犯。
另一方面,还可以进行如下归结:
(11) (2)(6)
(12) (5)(11)
(13) (3)(12)
(14) (6)(13)
所以,也是罪犯。
同时根据(4)和(5)可知:和不是罪犯。
4。P86 第10 题
答: 线性归结策略的反例如下:
单文字子句归结策略的反例如下:
(补充) 设有子句集:S={(P(x) (Q(x,b),P(a) ((Q(a,b), (Q(a,f(a)), (P(y) (Q(y,y)}分别用每一种归结策略求出S的归结式。
解:
(1)
(2)
(3)
(4)
方法一:穷举法
S1:
(5)或 (1)(2)
(6) (1)(4)
(7) (2)(4)
已无法继续进行归结。
方法二:删除策略
首先,原子句集中的(3)和(4)可以直接删除,因为(3)以及(4)中的是纯文字。
其次进行第一次归结得
S1:
(5)或 (1)(2)
但是(5)可以删除,因为它是重言式。
归结结束。
方法三:支持集策略
这取决于所选择的目标子句。
以下以(1)作为目标子句的否定进行支持集归结:
S1:
(5)或 (1)(2)
(6) (1)(4)
已无法继续进行归结。
方法四:线性输入归结策略
得到的归结式和穷举法的相同。
方法五:单文字子句策略
不能得到任何归结式。
方法六:祖先过滤形策略
能够得到的归结式和穷举法的相同。
课本P53 第1题:
答:运行结果是: 在屏幕上显示出“the x is a3”。
课本P54 第3题:
答:在程序的clauses段中增加子句:
run :- path(X, Y), write(X, “(”, Y), nl, fail.
run.
并在goal段中以run为目标子句。
分析课本P51的例2.12程序的执行过程。
提示:关键是理解Prolog中的递归和回溯机制。
编写Prolog程序计算累加和:
答:代码如下:
predicates
sum(integer, integer)
goal
write(“Please input an positive interger X = “),
readint(X),
sum(X, R),
nl,
write(“The result is: “, R),
clauses
sum(0,0).
Sum(X, Y) :- X>0, X1=X-1, sum(X1, Y1), Y=X+Y1.