Пролог - Аргументы недостаточно проработаны. Глубина рекурсии
Я новичок в прологе и хочу ограничить глубину рекурсии, но он продолжает выдавать ошибку "Аргументы не достаточно созданы". Я обобщу задачу на график.
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.
Ограниченный путь (a,b,2) имеет значение true, но при ограниченном пути (a,c,1) выдается "Аргументы не достаточно созданы", и я не могу понять причину.
1 ответ
Решение
Чтобы продолжить вашу идею:
:- 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).