The usually append/3 is pure, but it leaves a choice point for mode (-,+,+):
?- append(X, [3], [1,2,3]). X = [1, 2] ; false.
That thee is a c