prolog - 算术平均/平均值的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
我感谢任何提示、链接、参考等!
解决方案
切换最后2个子句的顺序;Prolog 需要先实例化算术表达式中的所有变量,然后才能满足is
.
此外,您将在N
某处提供(基本情况是一个好地方)。
推荐阅读
- azure - azure 自定义视觉模型精度
- jquery - Oracle Apex 5.1 动态日期选择器 minDate 移动日历图标
- salesforce-lightning - 如何将按钮移动到销售人员闪电组件的中心
- css - 为不同品牌编写 CSS
- three.js - 有没有办法使用 WebGL 和 Three.js 获取深度值?
- java - 如何设置不需要凭据的 Localstack 容器?
- oracle - 在单字节字符集环境中存储多字节字符 oracle 12c
- java - 驱动程序信息:driver.version:未知,使用 ChromeDriver v78.0.3904.70 和 Chrome 浏览器 v78.0.3904.97
- javascript - 如何防止单击“#”链接跳转但仍执行其余代码
- javascript - 在javascript中将双引号添加到字符串的arraylist