我目前正在写一个dcg,它接受一个0,1*形式的列表,并告诉我列表中0的数量是否大于1的数量。我似乎无法让第三部分(dcg//0)工作。
sq --> [].
sq --> num, sq.
num --> [0].
num --> [1].
dcg --> sq, dd(Count), Count > 2.
dd(0) --> [].
dd(Newcnt) --> [0], dd(Cnt), { Newcnt is Cnt+1 }.
dd(Newcnt) --> [1], dd(Cnt), { Newcnt is Cnt-1 }.发布于 2012-11-28 17:57:57
@Little Bobby Tables的答案是合成(计算)元素数量,并且在DCG之外,您需要测试结果
..., phrase(sq(Z,O), S), Z is O*3, ...一种更简单的方法可以是传递不平衡。
z3o1(B) --> [1], {S is B-3}, z3o1(S).
z3o1(B) --> [0], {S is B+1}, z3o1(S).
z3o1(0) --> []. % accept only if balanced
..., phrase(z3o1(0), S), ...发布于 2012-11-28 15:19:08
下面的代码计算给定序列中0和1的数量。您可以使用它来应用您想要的任何条件。
sq(0, 0) --> [].
sq(Zeros, Ones) -->
[0],
sq(Z, Ones),
{Zeros is Z + 1}.
sq(Zeros, Ones) -->
[1],
sq(Zeros, O),
{Ones is O + 1}.https://stackoverflow.com/questions/13550741
复制相似问题