Пролог - Аргументы недостаточно проработаны. Глубина рекурсии

Я новичок в прологе и хочу ограничить глубину рекурсии, но он продолжает выдавать ошибку "Аргументы не достаточно созданы". Я обобщу задачу на график.

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).
Другие вопросы по тегам