I was having trouble with these two lines:
list_swizzle(L, [], L).
list_swizzle([], L, L).
The problem was that if the both of the first two arguments are the empty list, the first two statements would both be used, returning the same answer. However, if I put a cut in one, it wrecks backtracking. I eventually put in this line above them:
list_swizzle([], [], []):- !.
And it works. But I was wondering if there is a more elegant solution.