Раскрась список в Прологе
Я работаю с Прологом всего пару дней. Я понимаю некоторые вещи, но это меня действительно смущает.
Я предполагаю написать функцию, которая берет список и выравнивает его.
?- 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!
Почему это работает с одной стороны, но не с другой? Я чувствую, что упускаю что-то очень простое.