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.