【发布时间】:2012-03-12 18:55:31
【问题描述】:
我正在尝试实现谓词,该谓词将在所有变量未替换的模式下工作 sum(X,Y,Z) 将生成满足条件 X+Y=Z 的所有数字。 那么实际上我可以通过这种方式生成下一个数字的列表。
lisst([_]).
lisst([_|Y]) :- lisst(Y).
fill([]).
fill([0|Xs]) :- fill(Xs).
fill([1|Xs]) :- fill(Xs).
fill([2|Xs]) :- fill(Xs).
fill([3|Xs]) :- fill(Xs).
fill([4|Xs]) :- fill(Xs).
fill([5|Xs]) :- fill(Xs).
fill([6|Xs]) :- fill(Xs).
fill([7|Xs]) :- fill(Xs).
fill([8|Xs]) :- fill(Xs).
fill([9|Xs]) :- fill(Xs).
concat_number(D,N) :- concat_number(D,N,0).
concat_number([],M,M).
concat_number([H|T],N,M) :- M1 is M*10+H, concat_number(T,N,M1).
sum2(X,Y,Z) :-lisst(X),fill(X),lisst(Y),fill(Y),concat_number(X,X1), concat_number(Y,Y1), Z is X1 + Y1.
我对 prolog 的要求是?- sum2(X,Y,Z)。但它不能很好地工作,只有 Y 数在变化。
【问题讨论】:
-
我无法重现错误(在 SWI-Prolog 上)。顺便说一句,枚举有限列表的惯用方式是
length(L,_)。 -
未定义过程:
concat_number。此外,X是该定义中的单例变量。 -
请编辑您的原始问题; cmets 不适合长代码。另外,请重新考虑您的问题并尝试发送SSCCE。
标签: prolog