我正在尝试编写一个函数,该函数以递归方式将List中的前两个项目相加,并在剩余一个项目时返回。示例:
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.
链之后>
我正在尝试编写一个函数,该函数以递归方式将List中的前两个项目相加,并在剩余一个项目时返回。示例:addList([1,2,3,4],X)x = [10](此处的步骤为:[1,2,3,4]-> [3,...
首先,请注意,您可以等效地将[H|[H2|T]]
写入为[H,H2|T]
。