序言:将谓词应用于所有列表元素并求和结果

时间:2019-11-10 15:21:38

标签: list prolog

我有一个从谓词生成的特定列表,看起来像这样:

rs = grequests.map(rs,size=10)

for r in rs:
   print r.request

我还有一个以下谓词[a, b, c] 可用于列表中的每个元素:

p/3

,它将返回:

?- p(a, NewList, Number).

其中 NewList 是从 a 元素新生成的列表,而Number是NewList的长度。

问题

我想将NewList = [c, d], Number = 2. 谓词应用于所有元素,并获取

  1. 一个列表,其中包含所有NewList的所有元素,又称为所有NewList附加在一起的
  2. 以及所有数字的总和。

我试图这样做:

p/3

但失败了。

1 个答案:

答案 0 :(得分:0)

通常最好将您的关注点分开,并一次解决一个任务。您可以在此处使用maplist/4 [swi-doc]来调用列表中所有元素的谓词。然后,这会将第三个元素和第四个元素与p/3的结果统一。

接下来,我们可以使用append/2 [swi-doc]将列表附加在一起,并使用sumlist/2 [swi-doc]将列表元素加在一起。

因此,我们可以将其实现为:

loop_list(Ls, Xs, Sum) :-
    maplist(p, Ls, Xss, Items),
    append(Xss, Xs),
    sumlist(Items, Sum).