List 序言:找到偶数并将其添加到列表中

List 序言:找到偶数并将其添加到列表中,list,prolog,append,List,Prolog,Append,写入谓词evennumbers1,L2,如果列表L1 包含随机整数,列表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); evenNumb

写入谓词evennumbers1,L2,如果列表L1 包含随机整数,列表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).

您的代码有多个问题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).

我猜想它有问题,但你还没有解释是什么。问题是这行:append[H],L,L;但是我不知道如何在没有附加的情况下解决它。请看那些密切相关的问题和非常好的陈述式和。我以前看过这些答案,但我刚刚开始学习prolog。所以这不是那么容易弄清楚的!对于您接受的解决方案,请简单地尝试最一般的问题:到底有哪些解决方案?我们可以问:?-evenNumbersLs,Es.,然后我们得到,作为唯一的解决方案:Ls=Es,Es=[]。这肯定是不对的,不是吗?请考虑您实际期望从Prolog程序中获得的属性。例如,在最普遍的情况下,如果程序用一系列可能的解决方案来回答,而不是只给出其中一个,那将是非常棒的。让我们希望更好的答案也会被公布。考虑一下等待,学习不同的方法。