簡體   English   中英

Prolog總和列表元素在偶數位置

[英]Prolog sum list elements at even positions

我堅持到這一點。 無法找出如何在偶數位置求和。

domains
slist=integer*
pos,sum=integer
predicates
even(pos).
even_summ(slist,pos,sum).
clauses
even(X):- X mod 2 = 0.
even_summ([],0,0).
even_summ([H|T],P,S):- even_summ(T,P1,S1),
P=P1+1,
S=S1+H.
goal
even_summ([1,2,3,4,5,6,7],P,S).

這是一個涉及偶數和奇數的解決方案,不需要輔助變量。 它將sum_evensum_odd視為“共同謂詞”。

sum_even([], 0).
sum_even([_|T], S) :- sum_odd(T, S).

sum_odd([], 0).
sum_odd([X|T], S) :- S #= S1 + X, sum_even(T, S1).

由於您使用的是Visual(或Turbo或PDC)Prolog,因此需要按以下內容稍做重寫,而不是尾部遞歸或關系式:

sum_even([], 0).
sum_even([_|T], S) :- sum_odd(T, S).

sum_odd([], 0).
sum_odd([X|T], S) :- sum_even(T, S1), S = S1 + 1.

一個簡單的sumEven/2sumOdd/2是免費的)

sum1of2([], _, 0).

sum1of2([H | T], 0, S1) :-
  sum1of2(T, 1, S0),
  S1 is S0 + H.

sum1of2([_ | T], 1, S) :-
  sum1of2(T, 0, S).

sumEven(L, S) :-
  sum1of2(L, 1, S).

sumOdd(L, S) :-
  sum1of2(L, 0, S).

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM