如何在Prolog中不使用列表实现路线规划谓词ride/3
Prolog ride/3谓词实现方案
你之前的代码存在三个明显问题:
- 语法错误:子句头括号未闭合,运行时会直接报语法解析错误
- 构造子不符合要求:需求指定用
fromTo嵌套结构,你误用了go作为构造子 - 缺少递归逻辑:仅能处理直达路线,无法生成中转场景的多层嵌套结构
正确实现代码如下:
% 边界规则:两城市直接连通时,返回单层fromTo结构 ride(X, Y, fromTo(X, Y)) :- connection(X, Y). % 递归规则:先走到相邻中转节点,再拼接后续路线的嵌套结构 ride(X, Y, fromTo(X, Z, RestRoute)) :- connection(X, Z), ride(Z, Y, RestRoute).
运行测试?- ride(paris,lisbon,X).即可得到你需要的输出:
X = fromTo(paris, barcelona, fromTo(barcelona, madrid, fromTo(madrid, lisbon)))
内容的提问来源于stack exchange,提问作者vintorez
相关产品推荐
相关产品推荐

