Faça uma lista no Prolog

Eu só trabalho com o Prolog há alguns dias. Eu entendo algumas coisas, mas isso realmente está me confundindo.

Suponho que escrevo uma função que pega uma lista e a aplan

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

A função remove as estruturas internas da list

Isso é o que tenho até agora:

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

Agora, isso funciona quando ligo para:

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

Mas quando ligo para ver se uma lista que eu introduzo já está achatada, retornafalse ao invés detrue:

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

Por que funciona por um lado, mas não por outro? Sinto que estou perdendo algo muito simples.

questionAnswers(14)

yourAnswerToTheQuestion