繁体   English   中英

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

[英]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谓词应用于所有元素,并得到

  1. 一个列表,由所有 NewLists 中的所有元素组成,也就是所有 NewLists 附加在一起
  2. 和所有数字的总和。

我试着这样做:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM