prolog - 如何在 Prolog 中查找城市之间的距离?

标签 prolog depth-first-search

如何使用深度优先搜索查找城市之间的可能路线 这是我的代码:

DOMAINS
    s = symbol.
    sList = symbol*.

PREDICATES
    nondeterm link(s, s,integer).
    nondeterm depth_first_search(s, s, sList,integer).

CLAUSES


    link("Erbil","Koysinjaq",12).
    link("Erbil","Kirkuk",15).
    link("Erbil","Shaqlawa",15).
    link("Erbil","Mosul",22).
    link("Shaqlawa","Akre",33).
    link("Mosul","Duhok",44).
    link("Mosul","Akre",55).
    link("Kirkuk","Koysinjaq",66).
    link("Kirkuk","Chamchamal",88).
    link("Chamchamal","Sulaimani",34).
    link("Koysinjaq","Sulaimani",22).
    link("Sulaimani","Ranya",33).
    link("Akre","Duhok",22).

    depth_first_search(X, X, [X],0).
    depth_first_search(X, Y, [X|T],NewDis):-
        link(X, Z , Dis),
        NewDis=NewDis+Dis,
        depth_first_search(Z, Y, T,NewDis).

GOAL
    depth_first_search("Erbil", "Duhok", PathToGoal,Dis).

当我执行时,我得到了这个错误:

E;Test_Goal, pos: 652, 707 Free variable in expression

这里我想要这些城市之间所有可能的联系以及它们之间的距离 现在该怎么做,感谢您的帮助

最佳答案

看看这是你的错误:

depth_first_search(X, X, [X],0).
    depth_first_search(X, Y, [X|T],L):-
        link(X, Z , L1),
        depth_first_search(Z, Y, T,L2),L=L1+L2.

GOAL
    depth_first_search("Erbil", "Duhok", PathToGoal,Dis).

它现在对我有用:)

关于prolog - 如何在 Prolog 中查找城市之间的距离?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23312180/

相关文章:

list - Prolog-查找列表的产品

Prolog 堆栈外错误

java - Java 中的农夫、狼、山羊和卷心菜广度优先和深度优先搜索

java - 用java制作深度优先搜索算法

Prolog:如何做 "check(a++b++c++d equals d++a++c++b) -> yes"

prolog - 立即学习 Prolog! DCG实践示例

algorithm - 为什么在这种未定义的情况下,我对 Dijkstra 算法的实现会失败?

c++ - 该算法用于查找所有路径总和的时间复杂度是多少?

c++ - 使用 DFS 检测有向图中的循环?

algorithm - DFS : confused by visiting, 已访问和未访问