簡體   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