1

我正在尝试编写一个程序,该程序给出一个列表并返回一个在第一个列表中有偶数的较新列表,如下所示:

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.
4

2 回答 2

1

mod 2你很接近 - 当操作失败时,需要有一些东西可以删除第一个元素。此外,您的“复制”规则并不完全正确。

试试这个:

evennom([], []).
evennom([H|T1], [H|T2]) :- H rem 2 =:= 0, !, evennom(T1, T2).
evennom([_|T1], T2) :- evennom(T1, T2).
于 2012-04-21T02:21:58.790 回答
0

Prolog 为你做递归..

evennom(ListIn, ListOut) :-
    findall(Even, (nth0(_, ListIn, Even), 0 is (Even mod 2)), ListOut).
于 2012-04-21T15:23:38.400 回答