pack([], []).

pack([X], [[X]]).

pack([H, T|TS], [[H]|TR]):-
    H \= T,
    pack([T|TS], TR).

pack([H, H|HS], [[H|TFR]|TR]):-
    pack([H|HS], [TFR|TR]).

:- pack([a,a,a,a,b,c,c,a,a,d,e,e,e,e],X), write(X).