If the head of the list unifies with the wanted element, the empty list is returned as the left list, and the rest of the list (the queue) as the right list:
split([H|T],H,[],T).
Finally, we recursively search the list's queue and add the current head to the resulting left list:
split([H|T],E,[H|F],S) :- split(T,E,F,S).
For example:
?- split([a,b,c,d,e,f,g], d, X, Y).
X = [a,b,c] , Y = [e,f,g] ;
false.
?- split([a,b,c,d,e,d,g], d, X, Y).
X = [a,b,c] , Y = [e,f,g] ;
X = [a,b,c,d,e] , Y = [g] ;
false.
?- split([a,b,c], d, X, Y).
false.