首页 > 解决方案 > 算术平均/平均值的Prolog递归实现

问题描述

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


资料来源:递归算术平均值

数据库:

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

我感谢任何提示、链接、参考等!

标签: prologaverage

解决方案


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

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


推荐阅读