是否有任何 prolog 实现能够枚举可数无限结果的所有元素?
让我们考虑枚举所有自然数对。如果我们按 {(0,0), (0,1), (1,0), (0,2), (1,1), (2,0), ...} 的顺序枚举对,我们可以枚举所有对。但是,如果我们按照以下 GNU prolog 程序的顺序 {(0,0), (0,1), (0,2), (0,3) ...} 枚举对,我们永远不会达到诸如 ( 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 ?