如何在 Prolog 中使用 DCG 生成长度为 n-1 的所有二进制字符串的语言
How to generate the language of all binary strings of length n-1 using a DCG in Prolog
z(1) --> [].
z(N) --> [0] , z(Nm), {N is Nm+1}.
z(N) --> [1] , z(Nm), {N is Nm+1}.
这就是我目前所拥有的。我要生成
[0,0]
[0,1]
[1,0]
[1,1]
但在 [0, 0]
之后进入无限循环
查询时
?- z(3, X, []).
如果你总是调用N为整数的谓词,你可以尝试:
z(1) --> [].
z(N) --> [0] , {N>1, Nm is N-1}, z(Nm).
z(N) --> [1] , {N>1, Nm is N-1}, z(Nm).
结果:
?- z(3, X, []).
X = [0, 0] ;
X = [0, 1] ;
X = [1, 0] ;
X = [1, 1] ;
false.
z(1) --> [].
z(N) --> [0] , z(Nm), {N is Nm+1}.
z(N) --> [1] , z(Nm), {N is Nm+1}.
这就是我目前所拥有的。我要生成
[0,0]
[0,1]
[1,0]
[1,1]
但在 [0, 0]
之后进入无限循环查询时
?- z(3, X, []).
如果你总是调用N为整数的谓词,你可以尝试:
z(1) --> [].
z(N) --> [0] , {N>1, Nm is N-1}, z(Nm).
z(N) --> [1] , {N>1, Nm is N-1}, z(Nm).
结果:
?- z(3, X, []).
X = [0, 0] ;
X = [0, 1] ;
X = [1, 0] ;
X = [1, 1] ;
false.