基本上,我需要编写一个谓词 , even_elts(L,M)
,这L
是一个生成的新列表,其中仅包含来自M
(0th, 2nd, 4th 等)的偶数索引元素
add_tail([X],[],X).
add_tail([H|NewT],[H|T],X) :-
add_tail(NewT,T,X).
even_elts(L,[]) :- L = [].
even_elts(L,M) :- even_elts2(L,M,1).
even_elts2(L,[H2|T2],Ct) :-
Ct2 is Ct + 1,
((Ct2 mod 2) =:= 0, add_tail(L,L2,H2), even_elts2(L2,T2,Ct2); even_elts2(L,T2,Ct2)).
even_elts2(_,[],_) :- !.
如果M
为空或包含 1 或 2 个元素,则此方法有效。但是,它只从 中获取第一个偶数索引元素M
,而不是其余的。任何指针
编辑:通过删除奇数索引元素而不是尝试创建新列表并复制数据来以不同的方式解决问题。但是,如果有人能为我的原始代码找出解决方案,我会很感兴趣。