在列表中添加整数

发布于 2024-12-09 11:45:39 字数 199 浏览 0 评论 0原文

由于某种原因,这不起作用。我得到: 错误:is/2:参数未充分实例化

1 add_list([]).
2 add_list([H|T]):-
3                 Sum2 is Sum1 + H,
4                 add_list(T).

我正在尝试添加列表的内容(仅包含数字)。

For some reason, this is not working. I am getting:
ERROR: is/2: Arguments are not sufficiently instantiated

1 add_list([]).
2 add_list([H|T]):-
3                 Sum2 is Sum1 + H,
4                 add_list(T).

I am trying to add the contents of a list (containing only numbers).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

泅人 2024-12-16 11:45:39

我不确定你想做什么。但是,如果您尝试计算总和,则会这样(将名称更改为 list_sum,因为 add_list 没有任何意义):

list_sum([], 0).
list_sum([H|T], Sum):-
    list_sum(T, SubSum),
    Sum is SubSum + H.

I'm not sure what you are trying to do. But if you are trying to calc total sum it will be this way (changed name to list_sum as add_list doesn't make any sense):

list_sum([], 0).
list_sum([H|T], Sum):-
    list_sum(T, SubSum),
    Sum is SubSum + H.
一抹微笑 2024-12-16 11:45:39

您可以使用 Foldl 拥有“功能性思维”:

foldl(_P, [], V, V).

foldl(P, [H|T], V1, VF) :-
    call(P, H, V1, V2),
    foldl(P, T, V2, VF).


sum_list(L, S) :-
    foldl(add, L, 0, S).


add(X, Y, Z) :-
    Z is X+Y.

You can have a "functionnal mind" with foldl :

foldl(_P, [], V, V).

foldl(P, [H|T], V1, VF) :-
    call(P, H, V1, V2),
    foldl(P, T, V2, VF).


sum_list(L, S) :-
    foldl(add, L, 0, S).


add(X, Y, Z) :-
    Z is X+Y.
苍暮颜 2024-12-16 11:45:39

或者,您也可以使用累加器(优点是,它是尾递归的,因此可以优化)

list_sum(L,R) :- list_sum(L,0,R).   
list_sum([],A,A). 
list_sum([H|T],A,R) :- A1 is A + H, list_sum(T,A1,R).

Alternatively you could also use an accumulator (the advantage is, that it is tail-recursive and therefore can be optimized)

list_sum(L,R) :- list_sum(L,0,R).   
list_sum([],A,A). 
list_sum([H|T],A,R) :- A1 is A + H, list_sum(T,A1,R).
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文