List 在prolog中将元素追加到列表中

List 在prolog中将元素追加到列表中,list,prolog,logic,predicate,List,Prolog,Logic,Predicate,我有一个5人的数据库,有收入属性。我想把所有会员的收入加起来。 为此,我想创建一个收入列表并添加它们 为了创建收入列表,我将append谓词写成 append(Element, List, OutputList) 这会将元素添加到列表中,并在outputlist中返回它 现在我想把每个成员的收入放在一个列表中,并添加列表中的元素。 但我无法将所有元素都放在列表中。你能帮我创建这两个谓词吗。 这是我写的代码 member(a,2). member(b,1). member(c,2). membe

我有一个5人的数据库,有收入属性。我想把所有会员的收入加起来。 为此,我想创建一个收入列表并添加它们

为了创建收入列表,我将append谓词写成

append(Element, List, OutputList)
这会将元素添加到列表中,并在outputlist中返回它

现在我想把每个成员的收入放在一个列表中,并添加列表中的元素。 但我无法将所有元素都放在列表中。你能帮我创建这两个谓词吗。 这是我写的代码

member(a,2).
member(b,1).
member(c,2).
member(d,3).
member(e,1).

append([],L,L).
append(Elem,L,X):- append([],[Elem|L],X).

% this add predicate is incorrect
add(L,X) :- member(_,Income),append(Income,L,L),X is L.

我想将输出列表生成为[2,1,2,3,1],并将它们相加,得到2+1+2+3+1=9。

您需要收集查询成员收入的所有结果,然后进行相加。要收集所有匹配结果,可以使用元谓词bagof、setof或findall之一。 您的任务可以通过以下方式完成:

member(a,2).
member(b,1).
member(c,2).
member(d,3).
member(e,1).


sum([], 0).
sum([H|T], S) :-
    sum(T, S1),
    S is S1 + H.
然后查询:

findall(Income, m(_, Income), Incomes), sum(Incomes, S).
给你:

Incomes = [2, 1, 2, 3, 1],
S = 9
您希望您的add做什么?注意成员和附加名称。这些可能是内置谓词的名称。