Prolog中深度优先搜索输出的问题

时间:2018-11-09 09:30:03

标签: 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] ?

1 个答案:

答案 0 :(得分:1)

在谓词中,使用两个看起来(在图形上相似)的变量:

solve( N, [N] ) :-
    goal( N).

solve( N, [N1 | Sol] ) :-
    s( N, Nl),
    solve( Nl, Sol).

此处Nl(带有小写的L)看起来与N1(带有1的)相似。实际上,Prolog解释器识别出N1仅使用一次,并发出警告:

?- ['file.pl'].
Warning: /tmp/file.pl:8:
        Singleton variables: [N1] 
true.

N1变量与主体中定义的Nl变量无关,因此保持统一。

但是,话虽如此,如果您真的想在此处输出,则应在“路径”结构中使用N,而不要在N1中使用,因为否则solve(a, L),{{1 }}将以L开头,而不是以b开头,并且将两次提及最后一个节点(此处为a),因此:

c