以下にPrologのsplit述語の定義を示します。
split('',_,[]) :- !.
split(Atom,Divs,X) :-
    sa(Atom,AtomL,Divs,Div,AtomR),
    split(AtomL,Divs,LL),
    split(AtomR,Divs,LR),
    append(LL,[Div|LR],X).
split(Atom,Divs,[Atom]) :-
    not(sub_atom_2(Atom,AtomL,Divs,Div,AtomR)).

sa(Atom,AtomL,Divs,Div,AtomR) :-
    member(Div,Divs),
    sub_atom(Atom,Sp,Len,RLen,Div),
    sub_atom(Atom,0,Sp,_,AtomL),
    sub_atom(Atom,Sp + Len,RLen,_,AtomR).
これで
?- split(abcdefgh,[bc,b,ef],X).
X = [a,bc,d,ef,gh];
X = [a,b,cd,ef,gh];
X = [a,bc,d,ef,gh];
X = [a,b,cd,ef,gh];
no.
のような実行結果が得られます。