我怎样才能在prolog的其他三个列表中拆分列表?

时间:2015-09-12 10:35:29

标签: split prolog

这是我已经制作的代码,它应该将列表分成三个其他列表,在第一个列表中应该有负数,在第二个列表中偶数,在第三个列表中为奇数。 / p>

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

2 个答案:

答案 0 :(得分:1)

假设奇数和偶数列表仅用于非负数,则可以使用四子句谓词进行拆分。 base子句应该处理一个空列表,提供空结果。其余三个条款应该处理三个​​条件 - 即头部为负时,头部为奇数,头部为偶数时。

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

ffmpeg -i http://.../playlist.m3u8 -c copy -bsf:a aac_adtstoasc output.mp4

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

Demo.

答案 1 :(得分:0)

要学习,最好从头开始实施,但实际上,有一些库可以处理大多数常见任务

functie(L,N,O,E) :-
  partition(>=(0),L,T,N),
  partition(odd,T,O,E).

odd(N) :- 1 =:= N mod 2.