split(L,P,R):-split(L,P,[],R).
split([],_,[],[]).
split([],_,S,[S]) :- S \= [].
split([P|T],P,[],R) :- split(T,P,[],R).
split([P|T],P,L,[L|R]) :- L \= [], split(T,P,[],R).
split([H|T],P,S,R) :- H \= P, append(S, [H], S2), split(T,P,S2,R).

:- split(['_', '_', '#', '_', '#', '_'], '#', X), write(X), nl,
   split(['_', '_', '#', '_', '#', '#', '_'], '#', Y), write(Y), nl,
   split(['_', '_', '#', '_', '#', '#', '_', '#', '#'], '#', Z), write(Z), nl.