我有以下代码:
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] ?
答案 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