Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 在偶数位置的Prolog和列表元素_List_Recursion_Prolog_Sum - Fatal编程技术网

List 在偶数位置的Prolog和列表元素

List 在偶数位置的Prolog和列表元素,list,recursion,prolog,sum,List,Recursion,Prolog,Sum,我在这一点上结巴了。无法找到如何在偶数位置对元素求和 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

我在这一点上结巴了。无法找到如何在偶数位置对元素求和

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偶数/2
(A
sumOdd/2
免费提供)


这里有一个包含偶数和奇数的解,它不需要辅助变量。它将
sum\u偶数
sum\u奇数
视为“共同谓词”

由于您使用的是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.

@谢谢你,伙计!
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).
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.