Prolog编程:示例程序与数据结构操作
1. 电话查找问题
在查找电话的问题中,有两种方法。一种是“生成并测试”,先找出可能的房间,然后检查这些房间里是否有电话。另一种更高效的方法是先满足 hasphone(X)
条件,然后查看是否能从 a
到达 X
,代码如下:
?- hasphone(X), go(a, X, []).
这种方法虽然更高效,但意味着在开始搜索之前就“知道”电话的位置。将第三个参数初始化为空列表,就像是从一张白纸开始。可以改变这个参数来实现不同的搜索条件。例如,“不进入房间 d
和 f
找到电话”可以用 Prolog 表示为:
?- hasphone(X), go(a, X, [d,f]).
此外,还有相关的练习题:
- 练习7.2 :给上述程序添加注释,使其能打印如“进入房间 Y
”和“在房间 Y
找到电话”这样的消息,并填入相应的房间号。
- 练习7.3 :该程序能否找到替代路径?如果可以,在哪里放置“cut”目标以防止找到多条路径?
- 练习7.4 :是什么决定了房间的搜索顺序?