:- module(lists, [member/2, select/3, append/3, is_list/1, memberchk/2, reverse/2, maplist/2,
- maplist/3, maplist/4, maplist/5, maplist/6, maplist/7, maplist/8,
+ flatten/2, maplist/3, maplist/4, maplist/5, maplist/6, maplist/7, maplist/8,
maplist/9]).
member(X, [X|_]).
append([], R, R).
append([X|L], R, [X|S]) :- append(L, R, S).
-is_list(X) :- var(X), !, false.
+is_list(X) :- var(X), !, false.
is_list([]).
is_list([_|T]) :- is_list(T).
reverse([H|T], Ps, Rs) :-
reverse(T, [H|Ps], Rs).
+flatten([], List, List) :- !.
+flatten([Head|Tail], List0, List) :- !,
+ flatten(Head, List0, List1),
+ flatten(Tail, List1, List).
+flatten(Other, [Other|List], List).
+
+flatten(Tree, List) :- flatten(Tree, List, []).
+
maplist(_, []).
maplist(Cont1, [E1|E1s]) :-
call(Cont1, E1),