使用Prolog折叠添加列表中的所有项目

问题描述 投票:3回答:1

我正在尝试编写一个函数,该函数以递归方式将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,...

list recursion prolog addition
1个回答
1
投票

首先,请注意,您可以等效地将[H|[H2|T]]写入为[H,H2|T]

© www.soinside.com 2019 - 2024. All rights reserved.