gpt4 book ai didi

split - 我如何在序言中将一个列表拆分为其他三个列表?

转载 作者:行者123 更新时间:2023-12-02 03:22:16 25 4
gpt4 key购买 nike

这是我编写的代码,它应该将列表分成三个其他列表,第一个列表中应该有负数,第二个列表中应该有偶数,第三个列表中应该有奇数。

functie([],_,_,_).
functie([H|T],Neg,Odd,Even):-
((H<0) , append(Neg,[H],Neg1) , functie(T,Neg1,Odd,Even)) ;
(((H rem 2)=:=1), append(Odd,[H],Odd1) , functie(T,Neg,Odd1,Even)) ;
(((H rem 2)=:=0), append(Even,[H],Even1) , functie(T,Neg,Odd,Even1)).

最佳答案

假设奇数和偶数列表仅用于非负数,您可以使用四子句谓词进行拆分。基本子句应该处理一个空列表,提供空结果。其余三个子句应处理三种情况 - 即当头为负时、当头为奇数时和当头为偶数时。

结果非常简单:三个子句具有相同的结构;它们唯一的区别是递归调用之前的条件,以及头部元素添加到的列表。

split([],[],[],[]).
split([H|T], [H|Ntail], Odd, Even) :- H < 0, split(T, Ntail, Odd, Even).
split([H|T], Neg, [H|Otail], Even) :- H >= 0, ((H rem 2)=:=1), split(T, Neg, Otail, Even).
split([H|T], Neg, Odd, [H|Etail]) :- H >= 0, ((H rem 2)=:=0), split(T, Neg, Odd, Etail).

请注意,此实现不使用任何 Prolog 的库谓词。一切都通过统一完成。

Demo.

关于split - 我如何在序言中将一个列表拆分为其他三个列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32537813/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com