To implement this predicate, you only need three rules:
:- use_module(library(clpfd)).
split([], _, [], []).
split([H|T], P, L1, [H|T2]) :-
H
split(T, P, L1, T2).
split([H|T], P, [H|T1], L2) :-
H
split(T, P, T1, L2).
The code is pretty simple
Note that because of library(clpfd)this predicate also works, for example. when the start list and vault are not known:
?- split(L,P,[5,47],[101]).
L = [101, 5, 47],
P in 48..101 ;
L = [5, 101, 47],
P in 48..101 ;
L = [5, 47, 101],
P in 48..101 ;
false.
Using partition/4
As stated in the comment, you can use partition/4to do this:
split(L, P, L1, L2) :-
partition(zcompare(>,P), L, L1, L2).
However, this will not show as many different actions as the first implementation.