我試圖實現謂詞,它將在所有變量未被替換的模式下工作 sum(X,Y,Z)將生成所有填充該條件的數字X + Y = Z 。 其實我可以用這種方式生成下一個數字的列表。如何實現序言中的sumator
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.
和我問的序言是? - sum2(X,Y,Z)。但是隻有Y號碼正在改變,它不能很好地工作。
我無法重現錯誤(在SWI-Prolog上)。順便說一句,列舉有限列表的習慣方式是「長度(L,_)」。 – 2012-03-11 17:13:30
未定義的過程:'concat_number'。另外,'X'是該定義中的單例變量。 – 2012-03-11 17:18:12
請編輯您的原始問題;評論對於很長一段代碼來說並不好。此外,請重新考慮您的問題,並嘗試使用[SSCCE](http://sscce.org/)。 – 2012-03-11 17:25:25