You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Prolog元组算术:多项式求值代码运行报错问题咨询

修复Prolog多项式求值代码的算术错误

首先,咱们来定位问题根源:你的输入是元组列表(比如[(1,0),(4,3)]),但原代码的列表匹配逻辑错误地把列表当成了扁平的[系数, 指数, 系数, 指数...]结构。这会导致递归时把元组直接代入算术运算,而Prolog的is/2只支持数值运算,复合项(比如(4,3))无法参与计算,所以才会抛出算术错误。

修正后的代码

evaluate(P, X, Y) :- evaluate(P, X, Y, 0).

% 终止条件:列表为空时,累加器S就是最终结果Y
evaluate([], _, S, S).

% 递归子句:逐个取出列表中的(系数, 指数)元组
evaluate([(Coeff, Exp)|Rest], X, Y, S) :-
    S1 is S + Coeff * X^Exp,
    evaluate(Rest, X, Y, S1).

代码逻辑说明

  • 初始调用:evaluate(P,X,Y) 负责初始化累加器S为0,调用带累加器的辅助谓词启动计算。
  • 终止条件:当多项式项列表为空时,把累加的结果S赋值给Y,结束递归流程。
  • 递归处理:每次从列表头部取出一个(系数, 指数)元组,计算当前项的值并加到累加器S上得到新的累加器S1,再递归处理剩余的多项式项。

测试示例

比如执行以下查询:

?- evaluate([(1,0),(4,3)], 2, Y).

计算过程为 1*2^0 + 4*2^3 = 1 + 32 = 33,最终会返回 Y = 33。

这样修改后,代码就能正确处理元组形式的多项式列表啦~

内容的提问来源于stack exchange,提问作者Mitchell Faas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:20:44