如何在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
相关产品推荐
相关产品推荐

