如何定义此谓词,使其不会永远 运行

How do I define this predicate so that it doesn't run forever

我需要定义一个谓词:

?- X = succ(X), nu(X).
false.

我该怎么做?它似乎不会 return 任何东西,只会永远 运行。

你可以这样试试:

nu(0).
nu(S) :-
    acyclic_term(S),
    S = succ(X),
    nu(X).

必须调用 acyclic_term/1 才能在第一个查询中失败。