[英]Prolog: Find even numbers add them on a list
Write predicate evenNumbers(L1, L2)
which is true if the list L1
containing random integers and the list L2
contains even integers from L1
. 编写谓词
evenNumbers(L1, L2)
,如果列表L1
包含随机整数,列表L2
包含来自L1
偶数整数,则为true。
For example: 例如:
?-evenNumbers ([2,1,-3,6,8,9], L2).
»Your program returns L2 = [2,6,8].
»您的程序返回
L2 = [2,6,8].
My code is: 我的代码是:
evenNumbers([],[]).
evenNumbers([H|T],L):-
integer(H),
0 is H mod 2,
append([H],L,L);
evenNumbers(T,L).
Your code has multiple issues append([H],L,L);
您的代码有多个问题
append([H],L,L);
will stop recursion and give you a wrong list also your if-then-else statement isn't right .So you could write: 将会停止递归并给您一个错误的列表,如果您的if-then-else语句也不正确,那么您可以这样写:
evenNumbers([],[]).
evenNumbers([H|T],L1):-
integer(H),
(H mod 2 =:=0 -> L1=[H|T1],evenNumbers(T,T1);
evenNumbers(T,L1) ).
Example: 例:
?- evenNumbers([2,1,-3,6,8,9], L2).
L2 = [2, 6, 8].
Another way writing it would be: 编写它的另一种方式是:
evenNumbers(L1,L2):-findall(X,(member(X,L1), X mod 2=:=0),L2).
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.