我正在寻找解决以下问题的方法:“编写一个Prolog程序来总结给定列表中的所有奇数位置。”序言 - 总结“定位”列表中的元素
样品查询:
?- odd([1,2,3,4,5],Sum).
Sum = 9. % correct as 1+3+5 equals 9
我正在寻找解决以下问题的方法:“编写一个Prolog程序来总结给定列表中的所有奇数位置。”序言 - 总结“定位”列表中的元素
样品查询:
?- odd([1,2,3,4,5],Sum).
Sum = 9. % correct as 1+3+5 equals 9
这看起来像功课,所以我只给你在正确的方向轻推。问题实际上是两个独立的问题:过滤和总和。分别解决这些问题,并通过组合解决方案来实现奇数。
'奇数位'的总和可以通过以下找到;这里列出了从0索引:
odd_sum_nth0([_,X|Y], Sum) :-
odd_sum_aux(Y, X, Sum).
否则,分别列出了从号码1:
odd_sum_nth1([X|Y], Sum) :-
odd_sum_aux(Y, X, Sum).
考虑:
odd_sum_aux([_, W|X], Y, Sum) :-
!, Z is W + Y,
odd_sum_aux(X, Z, Sum).
odd_sum_aux(_, Sum, Sum).
买者自负。 ;-)
直接执行:
odd([],0).
odd([X|Xs],S) :- even(Xs,S0), S is S0+X.
even([],0).
even([_|Xs],S) :- odd(Xs,S).
示例查询:
?- 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.
感谢另一downvote没有评论,@false。 – sharky 2015-06-09 23:41:22