Prolog 要打印路径,但出现错误
想要打印我从一个点到另一个点所遵循的路径。但是会出现错误。例如,我想要:Prolog 要打印路径,但出现错误,prolog,turbo-prolog,Prolog,Turbo Prolog,想要打印我从一个点到另一个点所遵循的路径。但是会出现错误。例如,我想要: domains list=symbol* predicates path(symbol,symbol) solve(symbol,symbol,list) insert(symbol,list,list) clauses path(a,b). path(b,c). path(c,d). path(d,e). path(a,d). path(c,e
domains
list=symbol*
predicates
path(symbol,symbol)
solve(symbol,symbol,list)
insert(symbol,list,list)
clauses
path(a,b).
path(b,c).
path(c,d).
path(d,e).
path(a,d).
path(c,e).
solve(X, Z, P):-
path(X,Z),
insert(Z,Temp,P),
P=Temp.
solve(X,Z,P):-
path(X,Y),
insert(Y,Temp,P),
P=Temp,
solve(Y,Z,P).
insert(X,[X|Tail],Tail).
insert(X,[Y|Tail],[Y|Tail1]):-
insert(X,Tail,Tail1).
回答:p=[a,b,c]我不明白你的solve谓词做什么。以下是我的猜测:
goal
solve(a,c,P).
solve将使用
一个接一个地为您提供路径
浏览它们(好吧,我想至少因为我对您使用的prolog实现一无所知)。请描述您遇到的错误类型,以及这是哪种非标准的prolog方言。我使用的是turbo prolog,因此我不知道错误是什么,但是光标指向第一个插入谓词的尾部。关于Prolog,首先要了解的是统一不是赋值。您的构造insert(Z,Temp,P),P=Temp
与insert/3
的第一个子句以及目标solve(a,c,P)
导致循环数据结构(即P=[b | P]
)。得到的错误取决于Prolog系统。
solve(Start, End, [Start|PathMinusStart]) :-
solve_(Start, End, PathMinusStart).
solve_(Start, End, [End]) :-
path(Start, End).
solve_(Start, End, [Waypoint|Path]) :-
path(Start, Waypoint),
solve_(Waypoint, End, Path).
search_path(Node, End, Temp, Path) :- path(Node,End),reverse([End | [Node | Temp]], Path).
search_path(Node, End, Temp, Path) :-
path(Node, Next),
not(member(Node, Temp)),
search_path(Next, End, [Node | Temp], Path).
solve(Start, End, Path) :- search_path(Start, End, [], Path).