我有一个从谓词生成的特定列表,看起来像这样:
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.
谓词应用于所有元素,并获取
我试图这样做:
p/3
但失败了。
答案 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).