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