首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Prolog -列表中“定位”元素的总和

Prolog -列表中“定位”元素的总和
EN

Stack Overflow用户
提问于 2010-04-28 19:02:19
回答 3查看 675关注 0票数 1

我正在寻找以下问题的解决方案:“编写一个Prolog程序来总结给定列表中的所有奇数位置。”

示例查询:

代码语言:javascript
运行
复制
?- odd([1,2,3,4,5],Sum).
Sum = 9.                   % correct as 1+3+5 equals 9
EN

回答 3

Stack Overflow用户

发布于 2015-05-26 19:49:44

直接实现:

代码语言:javascript
运行
复制
odd([],0).
odd([X|Xs],S) :- even(Xs,S0), S is S0+X.

even([],0).
even([_|Xs],S) :- odd(Xs,S).

示例查询:

代码语言:javascript
运行
复制
?- odd([],S).
S = 0.

?- odd([1],S).
S = 1.
?- odd([1,_],S).
S = 1.

?- odd([1,_,3],S).
S = 4.
?- odd([1,_,3,_],S).
S = 4.

?- odd([1,_,3,_,5],S).
S = 9.
票数 1
EN

Stack Overflow用户

发布于 2010-04-29 10:36:22

“奇数位置”元素的总和可以通过以下方式找到;其中列表从0开始索引:

代码语言:javascript
运行
复制
odd_sum_nth0([_,X|Y], Sum) :-
    odd_sum_aux(Y, X, Sum).

否则,我们的列表从1开始索引:

代码语言:javascript
运行
复制
odd_sum_nth1([X|Y], Sum) :-
    odd_sum_aux(Y, X, Sum).

给定:

代码语言:javascript
运行
复制
odd_sum_aux([_, W|X], Y, Sum) :-
    !, Z is W + Y,
    odd_sum_aux(X, Z, Sum).
odd_sum_aux(_, Sum, Sum).

买者自负。;-)

票数 0
EN

Stack Overflow用户

发布于 2010-04-28 19:08:59

这看起来像是家庭作业,所以我将在正确的方向上给你一点提示。这个问题实际上是两个独立的问题: filter和sum。分别解决这些问题,并通过组合解决方案来实现odd。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2728811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档