![](/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.