Prolog - 参数没有充分实例化。递归深度

时间:2017-12-10 00:37:23

标签: recursion prolog instantiation-error

我是prolog的新手,想要限制递归深度,但它不断抛出“参数没有充分实例化”的错误。我会将问题概括为图表。

edge(a,b).
edge(a,x).
edge(b,c).
edge(b,x).
edge(c,d).

所以,从a到d:a-b-c-d有一条路径 检查两个顶点之间是否存在路径非常容易:

path(X,Y) :- edge(X,Y).
path(X,Y) :- edge(X,Z), path(Z,Y).

现在我想将路径的长度限制为N:

limitedPath(X,Y,N) :- edge(X,Y), N >= 0.
limitedPath(X,Y,N) :- edge(X,Z),limitedPath(Z,Y,M), N = M + 1, N>0.

limitedPath(a,b,2)是真的, 但是 limitedPath(a,c,1)会抛出“参数没有充分实例化”,我无法理解。

1 个答案:

答案 0 :(得分:3)

继续你的想法:

:- use_module(library(clpfd)).

limitedPath(X,Y,N) :- N #>= 0, edge(X,Y).
limitedPath(X,Y,N) :- N #>= 0, N #= M+1, edge(X,Z), limitedPath(Z,Y,M).