![](/img/trans.png)
[英]Using the printlist/1 predicate in Prolog to sum up all numbers in a list
[英]Prolog: apply predicate to all list elements and sum results
我有一个从谓词生成的列表,如下所示:
[a, b, c]
我还有以下谓词p/3
可以应用于我的列表中的每个元素:
?- p(a, NewList, Number).
它会返回:
NewList = [c, d],
Number = 2.
其中NewList是从元素新生成的列表,Number 是 NewList 的长度。
问题:
我想将p/3
谓词应用于所有元素,并得到
我试着这样做:
loop_list([Element|[]], NewList, Number) :-
p(Element, NewList, Number).
loop_list([Head|Tail], [Tmp|NewList], Number) :-
loop_list(Tail, Tmp, Number).
但失败了。
通常最好将您的关注点分开,并一次解决一项任务。 您可以在此处使用maplist/4
[swi-doc]来调用列表中所有元素的谓词。 然后,这会将第三个和第四个元素与p/3
的结果统一起来。
接下来我们可以使用append/2
[swi-doc]到 append 列表一起,和sumlist/2
[swi-doc]一起使用列表的元素。
因此,我们可以将其实现为:
loop_list(Ls, Xs, Sum) :-
maplist(p, Ls, Xss, Items),
append(Xss, Xs),
sumlist(Items, Sum).
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.