prolog中的简单算法

时间:2012-04-21 02:03:34

标签: prolog

我正在尝试编写一个程序,该程序提供一个列表并返回一个在第一个列表中包含偶数的新列表,如下所示:

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.

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