Одним из возможных решений является следующее:
splitList([], []).
splitList([_], []).
splitList([A,B|T], R):- splitList([B|T], R1), R=[[A,B]|R1].
Идея состоит в том, что вы продолжаете вызывать split до тех пор, пока не доберетесь до случая [X] (только один элемент в списке)
[a,b,c,d] ->
[b,c,d] ->
[c,d] ->
[d]
В этот момент вы попадаете во второй случай, и начинается откат
R1 = [] => R = [[c,d]|[]]
и так далее.
Лучший способ - посмотреть след.