Prolog:查找偶数将它们添加到列表中

时间:2016-11-12 19:14:57

标签: list prolog append

写谓词evenNumbers(L1, L2)如果列表L1,则为true 包含随机整数,列表L2包含来自L1的偶数。

例如:

?-evenNumbers ([2,1,-3,6,8,9], L2). 

»您的程序返回L2 = [2,6,8].

我的代码是:

    evenNumbers([],[]).
    evenNumbers([H|T],L):-
        integer(H),
        0 is H mod 2,
        append([H],L,L);
        evenNumbers(T,L).

1 个答案:

答案 0 :(得分:1)

你的代码有多个问题append([H],L,L);会停止递归并给你一个错误的列表,你的if-then-else语句也不对。所以你可以写:

 evenNumbers([],[]).
 evenNumbers([H|T],L1):-
        integer(H),
        (H mod 2 =:=0 -> L1=[H|T1],evenNumbers(T,T1);
        evenNumbers(T,L1) ).

示例:

?- evenNumbers([2,1,-3,6,8,9], L2).
L2 = [2, 6, 8].

另一种写作方式是:

evenNumbers(L1,L2):-findall(X,(member(X,L1), X mod 2=:=0),L2).