我正在嘗試在城鎮之間編寫Prolog路由規劃器。這裏是我的代碼:在Prolog路由規劃器中出現本地堆棧錯誤
road(meath,dublin,5).
road(dublin,kildare,9).
road(kildare,wicklow,7).
road(wicklow,wexford,10).
/*Rules:*/
route(X,Y,[H|_ ],N) :-
road(H,Y,_),
routen(X,Y,N1),
N is N1.
route(X,Y,[H|T],N) :-
road(X,H,_),
routen(X,Y,N1),
N is N1,
route(H,Y,T,_),
!.
route(X,Y,[],N) :-
road(X,Y,N1),
N is N1.
routen(X,Y,N) :-
road(X,Y,N).
routen(X,Y,N) :-
road(X,Z,N1),
road(Z,Y,N2),
N is N1+N2.
routen(X,Y,N) :-
routen(X,Z,N1),
routen(Z,Y,N2),
N is N1+N2,
!.
謂詞road
有兩個城鎮和它們之間的距離。規則route
找到X
和Y
和routen
之間的城鎮列表,找到兩個城鎮之間的總體距離。
當我運行route
時,它有時有效,其他時間我得到ERROR: Out of local stack
。
例子:
?- route(meath,wexford,[dublin,kildare,wicklow],31).
true.
?- route(meath,wexford,[dublin,kildare,wicklow],30).
false.
?- route(meath,kerry,[dublin,kildare,wicklow],31).
ERROR: Out of local stack
最後一個應該返回false
,如meath
和kerry
之間的路由不存在。有誰知道我爲什麼會遇到錯誤?
當你說「序言中的規則是左繼續的」時,你是什麼意思。 ? – repeat
將減少的第一條規則是身體的第一條規則。搜索是一個「深度優先搜索」,所以它首先在左邊的分支上。 –