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

如何在Prolog中仅对列表中的正元素求和?

修复仅对正整数求和的Prolog程序

原代码的问题在于未过滤非正整数,所有元素都会被累加,导致负数被计入总和,出现不符合预期的结果。

修正后的代码需分两种情况处理列表元素:

  • 若当前元素是正整数,则将其加入子列表的求和结果中
  • 若当前元素不是正整数,则直接取子列表的求和结果,跳过该元素
sumlist([], 0).
% 处理正整数元素:累加到总和
sumlist([H|T], N) :-
    H > 0,
    sumlist(T, N1),
    N is N1 + H.
% 处理非正整数元素:直接跳过,取子列表的和
sumlist([H|T], N) :-
    H =< 0,
    sumlist(T, N).

测试查询:

?- sumlist([-2,2,3],N).
N = 5. % 符合预期

这段代码通过两个互斥规则分别处理正整数和非正整数元素,确保只有正整数被计入求和结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 11:46:08