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

在Prolog中实现多项式求值,解决递归仅返回true的问题

问题排查

你写的代码存在3个核心逻辑错误:

  • 递归基例未正确绑定求和初始值:空多项式的求值结果应为0,你写的eval_poly([],X,Y).没有对Y做任何绑定,导致后续求和没有初始值。
  • 递归子句的变量绑定逻辑错误:你拆分了两个子句处理当前项计算和求和,逻辑拆分完全错误,且第三个子句中Y is Y2 + Y的两个右值变量在执行时都未绑定,无法完成计算。
  • 变量重复定义冲突:第三个子句中你同时用Y作为输出结果和求和右值,变量名冲突,逻辑完全混乱。

修正后的代码

% 单项求值逻辑保留,你写的这部分是对的
eval_term([H|T], X, Y):- Y is X^T * H.

% 递归基例:空多项式求值为0
eval_poly([], _, 0).
% 递归子句:当前项的值 + 剩余多项式的和 = 总结果
eval_poly([H|T], X, Y):- 
    eval_term(H, X, CurrentVal), 
    eval_poly(T, X, RestSum), 
    Y is CurrentVal + RestSum.

测试结果

运行查询?- eval_poly([[1|2],[2|1],[3|0]],2, Y).,会得到输出Y = 11,符合预期。

思路提示

Prolog递归处理求和类问题的通用逻辑是:

  • 基例明确绑定空输入对应的初始值(求和就是0,求乘积就是1)
  • 递归子句先算当前层的值,再递归算剩余输入的结果,最后把两部分计算合并绑定到输出变量
  • 不要拆分不必要的子句,单个递归子句就能完成「当前计算+递归+结果合并」的完整逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 17:27:01