]> Repositorios git - scryer-prolog.git/commitdiff
add flatten.
authorMark Thom <[email protected]>
Tue, 27 Mar 2018 00:49:43 +0000 (18:49 -0600)
committerMark Thom <[email protected]>
Tue, 27 Mar 2018 00:49:43 +0000 (18:49 -0600)
README.md
src/prolog/lib/lists.pl

index 51732fa1028b8d6499492a694ad35e2b94b42bc8..829ea099625d0592bf0c56c08064323a107f80d3 100644 (file)
--- a/README.md
+++ b/README.md
@@ -136,6 +136,7 @@ The following predicates are built-in to rusty-wam.
 * `display/1`
 * `duplicate_term/2`
 * `false/0`
+* `flatten/2`
 * `float/1`
 * `functor/3`
 * `ground/1`
index b139f83bdcc5811f7373c39f9d496c13a926eebb..9b2e67f55e71284612bd7a646140b9e72f402680 100644 (file)
@@ -1,5 +1,5 @@
 :- 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|_]).
@@ -11,7 +11,7 @@ select(X, [Y|Xs], [Y|Ys]) :- select(X, Xs, Ys).
 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).
 
@@ -24,6 +24,14 @@ reverse([], Ys, Ys).
 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),