作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我编写的代码,它应该将列表分成三个其他列表,第一个列表中应该有负数,第二个列表中应该有偶数,第三个列表中应该有奇数。
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 的库谓词。一切都通过统一完成。
关于split - 我如何在序言中将一个列表拆分为其他三个列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32537813/
我是一名优秀的程序员,十分优秀!