I've been trying to create a predicate in Prolog which splits a list of integers into a list of positive integers and into a list of negative integers.
Sample query with expected result:
?- split([1,-2,3,4,-8],X,Y).
X = [1,3,4],
Y = [-2,-8].
This is the code I got so far:
split([], [], []).
split([Head|Tail], List1, List2) :- split(Tail, [Head|List1], List2), Head>=0.
split([Head|Tail], List1, List2) :- split(Tail, List1, [Head|List2]), Head<0.
I can't seem to figure out what I'm doing wrong.
The recursive part is not quite correct.
split([], [], []).
split([Head|Tail], [Head|List1], List2) :- Head>=0, split(Tail, List1, List2).
split([Head|Tail], List1, [Head|List2]) :- Head<0, split(Tail, List1, List2).
The Head
should be added to the positive list if Head >= 0
and to the negative list when Head < 0
.
Moreover, checking the sign of Head
at the beginning is better, because it will prevent unnecessary recursive calls.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With