算术平均/均值的Prolog递归实现

算术平均/均值的Prolog递归实现,prolog,average,Prolog,Average,我试图实现一个递归函数来计算 中给定列表的算术平均值,基于以下公式: 数据库: avg([],0,_). avg([X|L],Anew,Nnew) :- avg(L,A,N), Anew is (N * A + X) / Nnew, Nnew is N+1. 查询: ?- avg([5.0, 6.0, 7.0, 8.0], A, N). 预期产出: A = 6.5 不幸的是,我被困了很长一段时间,在尝试了一些变体之后,我现在得到了以下错误: Arguments

我试图实现一个递归函数来计算
中给定列表的算术平均值,基于以下公式:


数据库:

avg([],0,_).
avg([X|L],Anew,Nnew) :-
    avg(L,A,N),
    Anew is (N * A + X) / Nnew,
    Nnew is N+1.
查询:

?- avg([5.0, 6.0, 7.0, 8.0], A, N). 
预期产出:

A = 6.5
不幸的是,我被困了很长一段时间,在尝试了一些变体之后,我现在得到了以下错误:

Arguments are not sufficiently instantiated

我非常感谢任何提示、链接、参考资料等

切换最后2条的顺序;Prolog需要实例化算术表达式中的所有变量,然后才能满足
is


此外,您还需要在某个地方提供
N
(基本情况是一个好地方)。

切换最后两个子句的顺序;Prolog需要实例化算术表达式中的所有变量,然后才能满足
is


另外,您还需要在某个地方提供
N
(基本情况是一个好地方)。

非常感谢您,在将基本情况重新定义为
avg([],0,0)之后,它现在可以工作了。
并将
的行重新切换为
Nnew
!非常感谢,在将基本情况重新定义为
avg([],0,0)。
并重新切换
Nnew的行之后,它现在可以工作了!