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

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

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

Source: Recursive Arithmetic 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 are not sufficiently instantiated

我非常感谢任何提示,链接,参考等!

prolog average swi-prolog
1个回答
0
投票

切换最后2个子句的顺序; Prolog需要在满足is之前实例化算术表达式中的所有变量。

此外,您将提供N 某处

(基本情况是一个不错的选择)。
© www.soinside.com 2019 - 2024. All rights reserved.