2014-04-26 3 views
2

Как найти возможные пути между городами, используя поиск в глубину Вот это мой код:Как найти расстояние между городами в Прологе?

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 

здесь я хочу на все возможные связи между этими городами с расстоянием между ними сейчас, как это сделать, спасибо за помощь

ответ

3

Посмотрите, что это была минута:

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). 

Теперь он работает для меня :)

Смежные вопросы