廉师友<<人工智能>>作业二参考答案 (补充习题)判断以下公式对是否可合一,若可合一,则求出最一般的合一: (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.