序言:查找偶数将它们添加到列表中 [英] Prolog: Find even numbers add them on a list

查看:81
本文介绍了序言:查找偶数将它们添加到列表中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

写谓词 evenNumbers(L1,L2),如果列表 L1 则为true包含随机整数,并且列表 L2 包含甚至来自 L1 的整数.

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 ([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陈述不正确.因此,您可以这样写:

Your code has multiple issues 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:

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

这篇关于序言:查找偶数将它们添加到列表中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆