The reverse mode splice(-,-,+) is nondeterministic, and the most balanced solution(s) will be found first.
?- splice([1,2,3], [a,b,c], X). X = [1, a, 2, b, 3, c] Yes (0.00s cpu) ?- splice([1,2,3], [a,b,c,d,e], X). X = [1, a, 2, b, 3, c, d, e] Yes (0.00s cpu) ?- splice(A, B, [1,a,2,b,3,c]). A = [1, 2, 3] B = [a, b, c] More (0.00s cpu) ? ; A = [1, 2, 3, c] B = [a, b] More (0.00s cpu) ? ; A = [1, 2] B = [a, b, 3, c] More (0.00s cpu) ? ; A = [1, 2, b, 3, c] B = [a] More (0.00s cpu) ? ; A = [1] B = [a, 2, b, 3, c] More (0.00s cpu) ? ; A = [1, a, 2, b, 3, c] B = [] More (0.00s cpu) ? ; A = [] B = [1, a, 2, b, 3, c] Yes (0.00s cpu)