Prolog:谓词迭代产生的持久列表

问题描述 投票:0回答:1

我对Prolog完全陌生,但对它仍然了解不多,但是我试图找到一种方法来将列表永久保存在谓词中。

avg(X,A) :- database(X,Y,Z), member(something(_,_,P),Z), append(P,[],[P]), "calculate avg here".

我有这个谓词avg,它应该将X作为字符串,而A将是某些元素的平均avg。这些元素位于Z中,我已经设法用member(something(,P),Z)来保护它们,但是我想将它们添加到列表中,然后计算平均值,但是每次avg(X,A)到达末尾时,它重新开始,并且我的列表再次为空,如何通过这些迭代来维护持久列表?

谢谢您,请不要对我施加压力,我几乎不认识Prolog。

prolog average
1个回答
0
投票

您可以使用findall / 3构造列表,然后应用任何计算,例如

avg(X,A) :-
  findall(P,(database(X,_,Z),something(Z,P)),L),
  sum_list(L,S),
  length(L,C),
  ( C > 0 -> A is S/C ; /* should throw... */ 0 ).
© www.soinside.com 2019 - 2024. All rights reserved.