2010-04-28 76 views

回答

-1

這看起來像功課,所以我只給你在正確的方向輕推。問題實際上是兩個獨立的問題:過濾和總和。分別解決這些問題,並通過組合解決方案來實現奇數。

-1

'奇數位'的總和可以通過以下找到;這裏列出了從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). 

買者自負。 ;-)

+0

感謝另一downvote沒有評論,@false。 – sharky 2015-06-09 23:41:22

1

直接執行:

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. 
+0

更確定性! – false 2015-05-26 12:06:38

+0

@false。你在這。我希望你喜歡。 – repeat 2015-06-03 18:30:32