我正在尋找解決以下問題的方法:「編寫一個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