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