次の 2 行で問題が発生しました。
list_swizzle(L, [], L).
list_swizzle([], L, L).
問題は、最初の 2 つの引数の両方が空のリストである場合、最初の 2 つのステートメントが両方とも使用され、同じ答えが返されることでした。ただし、1つにカットを入れると、バックトラックが台無しになります。私は最終的にそれらの上にこの行を入れました:
list_swizzle([], [], []):- !.
そして、それは機能します。しかし、もっとエレガントな解決策があるかどうか疑問に思っていました。