Prolog 在列表中添加整数

Prolog 在列表中添加整数,prolog,Prolog,出于某种原因,这是行不通的。我得到: 错误:is/2:参数未充分实例化 1 add_list([]). 2 add_list([H|T]):- 3 Sum2 is Sum1 + H, 4 add_list(T). 我正在尝试添加列表的内容(仅包含数字)。我不确定您想做什么。但是,如果您试图计算总金额,它将是这样的(将名称更改为“将金额列为”“添加列表”没有任何意义): 我不知道你想做什么。但是,如果您试图计算总金额,它将是这样的(

出于某种原因,这是行不通的。我得到: 错误:is/2:参数未充分实例化

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

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

我不确定您想做什么。但是,如果您试图计算总金额,它将是这样的(将名称更改为“将金额列为”“添加列表”没有任何意义):


我不知道你想做什么。但是,如果您试图计算总金额,它将是这样的(将名称更改为“将金额列为”“添加列表”没有任何意义):


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


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

你可以通过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.
你可以通过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.

谢谢,这也是我想要的。但是我想我对prolog中的递归有点困惑。列出总和([],0)。这是基本情况吗?因为列表中没有元素了,所以达到了0吗?第一行是“事实”。第二行是“规则”。你们必须从规则中得出事实。我知道这有点奇怪,但你应该多读一点序言(例如)谢谢,这也是我想要得到的。但是我想我对prolog中的递归有点困惑。列出总和([],0)。这是基本情况吗?因为列表中没有元素了,所以达到了0吗?第一行是“事实”。第二行是“规则”。你们必须从规则中得出事实。我知道这有点奇怪,但是你应该多读一点关于prolog的(例如)s(X)来提高阶数!s(X)表示更高阶!
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.