Intersección y unión de 2 listas

Estoy empezando a aprender el prólogo (uso el prólogo SWI) e hice un ejercicio simple en el que tengo 2 listas y quiero calcular su intersección y unión. Aquí está mi código que funciona bastante bien, pero me preguntaba si hay una mejor manera de hacerlo, ya que no me gusta usar el Operador CUT.

intersectionTR(_, [], []).
intersectionTR([], _, []).
intersectionTR([H1|T1], L2, [H1|L]):-
    member(H1, L2),
    intersectionTR(T1, L2, L), !.
intersectionTR([_|T1], L2, L):-
    intersectionTR(T1, L2, L).

intersection(L1, L2):-
    intersectionTR(L1, L2, L),
    write(L).


unionTR([], [], []).
unionTR([], [H2|T2], [H2|L]):-
    intersectionTR(T2, L, Res),
    Res = [],
    unionTR([], T2, L),
    !.
unionTR([], [_|T2], L):-
    unionTR([], T2, L),
    !.

unionTR([H1|T1], L2, L):-
    intersectionTR([H1], L, Res),
    Res \= [],
    unionTR(T1, L2, L).
unionTR([H1|T1], L2, [H1|L]):-
    unionTR(T1, L2, L).

union(L1, L2):-
    unionTR(L1, L2, L),
    write(L).

Tenga en cuenta que quiero tener solo 1 resultado, no múltiples resultados (incluso si es correcto), así que ejecute el código con esto:

?- intersect([1,3,5,2,4] ,[6,1,2]).

debe salir con:

[1,2]
true.

y no con

[1,2]
true ;
[1,2]
true ;
etc...

Lo mismo debe ser válido para el predicado de unión.
Como dije, mi código funciona bastante bien, pero sugiera mejores formas de hacerlo.
Gracia

Respuestas a la pregunta(14)

Su respuesta a la pregunta