写谓词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).
答案 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).