我正在尝试编写一个程序,该程序提供一个列表并返回一个在第一个列表中包含偶数的新列表,如下所示:
evennom([1,3,2,4,3,2,1,2],out)
out = [2,4,2,2]
我的代码如下:
evennom([],[]).
evennom(H1|T1],[H2|T2):- H2 is H1 mod 2.
答案 0 :(得分:1)
你很接近 - 当mod 2
操作失败时,需要删除第一个元素。此外,您的“复制”规则并不完全正确。
试试这个:
evennom([], []).
evennom([H|T1], [H|T2]) :- H rem 2 =:= 0, !, evennom(T1, T2).
evennom([_|T1], T2) :- evennom(T1, T2).
答案 1 :(得分:0)
Prolog为你做递归..
evennom(ListIn, ListOut) :-
findall(Even, (nth0(_, ListIn, Even), 0 is (Even mod 2)), ListOut).