From 269138277157d05a3363d98d172cff34eac649c9 Mon Sep 17 00:00:00 2001 From: Mark Thom Date: Mon, 26 Mar 2018 18:49:43 -0600 Subject: [PATCH] add flatten. --- README.md | 1 + src/prolog/lib/lists.pl | 12 ++++++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 51732fa1..829ea099 100644 --- 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` diff --git a/src/prolog/lib/lists.pl b/src/prolog/lib/lists.pl index b139f83b..9b2e67f5 100644 --- a/src/prolog/lib/lists.pl +++ b/src/prolog/lib/lists.pl @@ -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), -- 2.54.0