Prolog:枚举可数无限结果的所有元素

egi*_*egi 5 prolog logic-programming

是否有任何prolog实现能够枚举可数无限结果的所有元素?

让我们考虑列举所有自然数对.如果我们按{(0,0),(0,1),(1,0),(0,2),(1,1),(2,0),...}的顺序枚举对,我们可以枚举所有对.但是,如果我们按照{(0,0),(0,1),(0,2),(0,3)...}的顺序枚举对作为以下GNU prolog程序,我们永远不会达到诸如( 1,1).

% cat nats.pl
nat(0).
nat(X1) :- nat(X), X1 is X + 1.

pair_of_nats(X, Y) :- nat(X), nat(Y).
% prolog
GNU Prolog 1.3.0
By Daniel Diaz
Copyright (C) 1999-2007 Daniel Diaz
| ?- ['nats.pl'].
compiling /home/egi/prolog/nats.pl for byte code...
/home/egi/prolog/nats.pl compiled, 4 lines read - 762 bytes written, 9 ms

yes
| ?- pair_of_nats(X,Y).

X = 0
Y = 0 ? ;

X = 0
Y = 1 ? ;

X = 0
Y = 2 ? ;

X = 0
Y = 3 ? 
Run Code Online (Sandbox Code Playgroud)