基本上,我想将两个列表转换为数字,然后添加结果数字并输出表示数字的列表。像add([2,2,2,2],[3,3,3],X)一样,X = [2,5,5,5]。在内部,[2,2,2,2]和[3,3,3]转换为2222和333,添加到2555.这是我的代码,它不起作用。
addlistnum([],[],X).
addlistnum([B|C],[D|E],X) :-
X is Y + F,
digits([B|C],Y),
digits([D|E],F).
digits(Num1,List) :-
digits(0, List,Num1).
digits(Num1, [], Num1).
digits(N, [B|As],Num1) :-
N1 is N * 10 + B,
digits(N1, As,Num1).
我收到以下错误: 错误:是/ 2:参数没有充分实例化 当我调用addlistnum()传递两个列表和一个变量时。如何修复我的代码以达到预期的效果?
答案 0 :(得分:1)
我不推荐这种方法,因为你失去了处理任何长度数字的可能性。您可以尝试改为:
add(A,B,R) :-
reverse(A,AR),
reverse(B,BR),
addl( AR, BR, 0, RR ),
reverse( R, RR ).
addl( [], [], 0, [] ).
addl( [], [], 1, [1] ).
addl( [H|Q], [], C, R ) :- addl( [H|Q], [0], C, R ).
addl( [], [H|Q], C, R ) :- addl( [H|Q], [0], C, R ).
addl( [AH|AQ], [BH|BQ], C, [RH|RQ] ) :-
RH is (AH+BH+C) rem 10,
C2 is (AH+BH+C) div 10,
addl( AQ, BQ, C2, RQ ).