Prolog循环虽然变量结果

Kyl*_*e G 5 loops prolog

我在Prolog中写了一个小程序.目前我可以打印第一个结果

test(X, 1, 4, 5).
write(X).
Run Code Online (Sandbox Code Playgroud)

但如果X的结果不止一个,我该如何打印下一个?

谢谢.

Kaa*_*rel 7

使用故障驱动的循环:

test(X, 1, 4, 5), writeln(X), fail ; true.
Run Code Online (Sandbox Code Playgroud)

或者以更易读的方式使用forall/2:

forall(test(X, 1, 4, 5), writeln(X)).
Run Code Online (Sandbox Code Playgroud)

没有必要构建所有解决方案的列表(这findall/3是为了什么),除非您需要此列表而不仅仅是将其打印出来.

如果您的Prolog没有,那么您可以forall/2通过以下方式自行实现它:

forall(A, B) :-
    \+ (call(A), \+ call(B)).
Run Code Online (Sandbox Code Playgroud)