Prolog - 如何在获取所有路径时限制路径长度?

Prolog - How to limit path length while getting all paths?

我试图在图中的 2 个节点之间找到所有小于或等于给定长度的路径。我能够找到所有路径,但我无法限制路径的大小。

我现在拥有的是:

path(P1,P2,[P1,P2]):- 
    edge(P1,P2).

path(P1,P2,[P1|Xs]):-
    edge(P1,W),
    path(W,P2,Xs).

这是有效的,我如何限制路径大小?

你可以试试:

limited_path(P1,P2,N,L):-length(L,N1), path(P1,P2,L), N1=<N.

path(P1,P2,[P1,P2]):- 
    edge(P1,P2).

path(P1,P2,[P1|Xs]):-
    edge(P1,W),
    path(W,P2,Xs).

现在调用 limited_path/4