Planificar una lista en Prolog

Hace solo un par de días que trabajo con Prolog. Entiendo algunas cosas, pero esto realmente me confunde.

Se supone que escribo una función que toma una lista y la aplana.

?- flatten([a,[b,c],[[d],[],[e]]],Xs).  
Xs = [a,b,c,d,e].                           % expected result

La función elimina las estructuras internas de la lista.

Esto es lo que tengo hasta ahora:

flatten2([],[]).
flatten2([Atom|ListTail],[Atom|RetList]) :-
      atom(Atom), flatten2(ListTail,RetList).
flatten2([List|ListTail],RetList) :-
      flatten2(List,RetList).

Ahora, esto funciona cuando llamo:

?- flatten2([a,[b,c],[[d],[],[e]]], R).
R = [a,b,c,d,e].                         % works as expected!

Pero cuando llamo para ver si una lista que ingresé ya está aplanada, devuelvefalse en lugar detrue:

?- flatten2([a,[b,c],[[d],[],[e]]], [a,b,c,d,e]).
false.                                   % BAD result!

¿Por qué funciona por un lado, pero no por el otro? Siento que me estoy perdiendo algo muy simple.

Respuestas a la pregunta(14)

Su respuesta a la pregunta