====== Flatten 2 ====== {{tag>lists recursion}} ===== Description ===== Flattening a list using a stack **Source**: The Art of Prolog ===== Download ===== Program source code: {{flatten_2.pl}} ===== Listing ===== /* flatten(Xs,Ys) :- Ys is a list of the elements of Xs. */ flatten(Xs,Ys) :- flatten(Xs,[],Ys). flatten([X|Xs],S,Ys) :- list(X), flatten(X,[Xs|S],Ys). flatten([X|Xs],S,[X|Ys]) :- X \== [], flatten(Xs,S,Ys). flatten([],[X|S],Ys) :- flatten(X,S,Ys). flatten([],[],[]). list([X|Xs]). % Program 9.1b Flattening a list using a stack ===== Comments =====