prolog - Prolog 列表返回 false
问题描述
我在 Prolog 中相对较新。我正在尝试将列表的所有元素相乘和相加,但它仅适用于一个元素。怎么了?
%Basic
mult([],A,0).
mult([X|Xs],A,S) :-
mult(Xs,A,R),
S is (X * A),
S is S + R.
谢谢你的帮助。
解决方案
问题出在线路上S is S + R.
。在 prolog 中,一个变量不能在一个子句的主体中取不同的值。在这里,您希望 的值发生S
变化,但这不起作用(除非R
为 0,在这种情况下S
保持不变;因此它已经适用于单元素列表)。
您需要使用不同的变量来存储中间结果,并且仅将输出变量用于最终结果。例如:
mult([], _, 0).
mult([X|Xs], A, S):-
mult(Xs, A, R),
Tmp is (X * A),
S is Tmp + R.
我还冒昧地修复了您收到的单例变量警告。尽管在这种情况下它是无害的,但您永远不应该忽略它们,因为它们通常指向有缺陷的逻辑。
推荐阅读
- php - CPanel 中的 CPanel 作业失败,URL 中有 % 字符
- python - 如何引用全局配置文件以在 Python 3.7 / Pandas 中过滤数据?
- html - 输入 texbox 间距 HTML
- c# - 组合框和列表框不显示文本文件的内容
- python - 使用 Python 将列中的值从浮点数舍入为整数
- java - 如何修复 Java Echo Server 中跳过的输入/输出行?
- php - 如何添加具有相同文本输入名称和单选按钮(html,php)的多个条目
- html - 未使用 @media 规则调整文本大小
- linux - yarn/npm start 使用本地开发服务器 create-react-app 给出权限错误
- azure-ad-b2c - 刷新 JWT 中的令牌