我只用 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!
为什么一方面有效,另一方面无效?我觉得我错过了一些非常简单的东西。