Раскрась список в Прологе

Я работаю с Прологом всего пару дней. Я понимаю некоторые вещи, но это меня действительно смущает.

Я предполагаю написать функцию, которая берет список и выравнивает его.

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

Функция извлекает внутренние структуры списка.

Вот что у меня есть:

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

Теперь это работает, когда я звоню:

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

Но когда я звоню, чтобы увидеть, что список, который я ввел, уже сплющен, возвращаетсяfalse вместо тогоtrue:

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

Почему это работает с одной стороны, но не с другой? Я чувствую, что упускаю что-то очень простое.

Ответы на вопрос(7)

Ваш ответ на вопрос