我想写一个函数,递归地将列表中前两个项目相加,并在只剩下一个项目时返回。 例如:
addList([1,2,3,4], X)
x = [10]
(操作步骤:[1,2,3,4] -> [3,3,4] -> [6,4] -> [10] )
(以下是需要翻译的内容):
这是我目前所拥有的:
addList([],[]).
addList([H|[H2|T]], []) :- L is H+H2, addList(T, [L|T]).
addList([H|T], [H2|_]) :- L is H+H2, addList(T, [L|T]).
在我的看法中,这将会做如下事情:
addList([1,2,3,4], X).
L=1+2 --> addList([3,4], [3,3,4])
L=3+3 --> addList([4], [6, 4])
L=6+4 --> addList([], [10])
这实际上会导致一个错误 - "参数未充分实例化"。
如果我将第一个addList改为
addList([],[_]).
,它将首先输出X = []。
,然后如果我使用;
继续,就会出现同样的错误。应该以false。
结束。(在链条
X = [1,2,3,4] ; X = [3,3,4] ; X = [6,4] ; X = [10] ; false.
之后)。