我对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。
您可以使用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 ).