提问人:John Sall 提问时间:11/9/2018 最后编辑:falseJohn Sall 更新时间:11/9/2018 访问量:131
prolog 中深度优先搜索输出的问题
Problem with depth first search output in 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赞
willeM_ Van Onsem
11/9/2018
#1
在谓词中,使用两个看起来相似的变量(以图形方式):
solve( N, [N] ) :-
goal( N).
solve( N, [N1 | Sol] ) :-
s( N, Nl),
solve( Nl, Sol).
这里(小写 L)看起来类似于(带 1)。事实上,Prolog 解释器识别出它只使用一次,并发出警告:Nl
N1
N1
?- ['file.pl'].
Warning: /tmp/file.pl:8:
Singleton variables: [N1]
true.
该变量与主体中定义的变量无关,因此保持不统一。N1
Nl
但话虽如此,如果你真的想在这里输出,你应该在“路径”构造中使用,而不是,因为否则 for 将以 , not 开头,并且会提到最后一个节点(这里)两次,所以:N
N1
solve(a, L)
L
b
a
c
solve( N, [N] ) :-
goal( N).
solve(N, [N | Sol]) :-
s(N, Nl),
solve(Nl, Sol).
评论
0赞
John Sall
11/9/2018
谢谢,这很有帮助。你学习prolog的秘诀是什么?我们的教练没有教我们太多。
0赞
willeM_ Van Onsem
11/10/2018
@sosscs:我认为Learn Prolog Now!会很有帮助。
评论
Nl
N1