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