У меня были проблемы с этими двумя строками:
list_swizzle(L, [], L).
list_swizzle([], L, L).
Проблема заключалась в том, что если оба из первых двух arguments - пустой список, будут использоваться первые два оператора, возвращающие один и тот же ответ. Однако, если я разрежу один, это приведет к сбою в возврате. В конце концов я поставил над ними эту строку:
list_swizzle([], [], []):- !.
И это работает. Но мне было интересно, есть ли более элегантное решение.