prolog中深度优先搜索输出的问题
我有以下代码:prolog中深度优先搜索输出的问题,prolog,Prolog,我有以下代码: s(a, b). s(b, c). goal(c). solve( N, [N] ) :- goal( N). solve( N, [N1 | Sol] ) :- s( N, Nl), solve( Nl, Sol). 当我输入查询时: solve(a, P). 它给了我: P = [_,_,c] ? yes 但是我想要完整的路径 P = [a,b,c] ? 在谓词中,使用两个看起来相似的变量(图形化): N1变量与主体中定义的Nl变量无关
s(a, b).
s(b, c).
goal(c).
solve( N, [N] ) :-
goal( N).
solve( N, [N1 | Sol] ) :-
s( N, Nl),
solve( Nl, Sol).
当我输入查询时:
solve(a, P).
它给了我:
P = [_,_,c] ?
yes
但是我想要完整的路径
P = [a,b,c] ?
在谓词中,使用两个看起来相似的变量(图形化):
N1
变量与主体中定义的Nl
变量无关,因此未统一
但是也就是说,如果你真的想在这里输出,你应该在“路径”结构中使用N
,而不是N1
,因为对于solve(a,L)
,L
将以b
开始,而不是a
,并且将两次提到最后一个节点(这里c
),因此:
solve( N, [N] ) :-
goal( N).
solve(N, [N | Sol]) :-
s(N, Nl),
solve(Nl, Sol).
solve(N[N]):-
目标(N)。
求解(N[N|Sol]):-
南(北,北),
求解(Nl,Sol)。
你把Nl
和N1
搞混了。谢谢,这很有帮助。你学习序言的秘诀是什么?我们的老师教得不多。@sosscs:我认为这会很有帮助。
?- ['file.pl'].
Warning: /tmp/file.pl:8:
Singleton variables: [N1]
true.
solve( N, [N] ) :-
goal( N).
solve(N, [N | Sol]) :-
s(N, Nl),
solve(Nl, Sol).