Removing elements from a list: select/3 behaves differently than nth1/4

Hi community,
I am a bit confused why in test7 i get a second solution in which IN is [p(A), p(A)]. This does not happen with nth1/4 as shown in test8. Does select/3 somehow unify p(A) and p(B)?
Cheers/JCR

test7:- 
    IN = [p(A), p(B)], 
    select(p(A), IN, OUT),
    numbervars(IN, 0, _),
    numbervars(OUT, 0, _),
    format('~w~w~n', ['IN is ', IN]),
    format('~w~w~n', ['OUT is ', OUT]).


test8:-
    IN = [p(A), p(B)],
    between(1, 2, IND),
    nth1(IND, IN, _, OUT),
    numbervars(IN, 0, _),
    numbervars(OUT, 0, _),
    format('~w~w~n', ['IN is ', IN]),
    format('~w~w~n', ['OUT is ', OUT]).

OUTPUT:

?- test7.
IN is [p(A),p(B)]
OUT is [p(B)]
true ;
IN is [p(A),p(A)]
OUT is [p(A)]
true.
?- test8.
IN is [p(A),p(B)]
OUT is [p(B)]
true ;
IN is [p(A),p(B)]
OUT is [p(A)]
true.

As the A in select shares with the A of the first element, selecting p(B) unifies A with B.

1 Like

Thanks @jan! Now i understand.