我是 prolog 的新手,想限制递归深度,但它不断抛出“参数没有充分实例化”错误。我会将问题概括为图表。
edge(a,b).
edge(a,x).
edge(b,c).
edge(b,x).
edge(c,d).
所以,有一条从 a 到 d 的路径: abcd 很容易检查两个顶点之间是否有路径:
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)抛出“参数没有充分实例化”,我不明白原因。