- 5
- 0
- 约1.48万字
- 约 70页
- 2018-03-30 发布于天津
- 举报
人工智能程序设计语言-Linux公社
* 华北电力大学 * 截断 直到目前为止,我们都一直在使用Prolog内建的回溯功能。使用此功能可以方便地写出结构紧凑的谓词来 但是,并不是所有的回溯都是必须的,这时我们需要能够人工地控制回溯过程 Prolog提供了完成此功能的谓词,叫做cut,使用符号!来表示,如果在cut处产生回溯,它会自动地失败,而不去进行其它的选择 * 华北电力大学 * 截断—例子 p(a). p(b). q(b). r1(X):-p(X),q(X). r1(c). ?-r1(X). p(a). p(b). q(b). r2(X):-!,p(X),q(X). r2(c). ?-r2(X). p(a). p(b). q(b). r3(X):-p(X),!,q(X). r3(c). ?-r3(X). p(a). p(b). q(b). r4(X):-p(X),q(X),!. r4(c). ?-r4(X). X=b,X=c. X=b. X=b. 无解 ①程序调用cut总是成功;②当某个子目标失败回溯时,不允许越过!回溯 * 华北电力大学 * 截断—例子 cut是不符合纯逻辑学的,不过出于实用的考虑,它还是必须的 过多地使用cut将降低程序的易读性和易维护性 它就像是其它语言中的goto语句 * 华北电力大学 * 例:Hanoi塔 如图,目的是把左边的所有盘子移到右边的杆子上。一次只能
原创力文档

文档评论(0)