flatten does not need to be defined as a system predicate.
git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@2287 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
This commit is contained in:
parent
d8e5f2c895
commit
dc45cde7ee
@ -64,6 +64,7 @@ swi_predicate_table(_,nth(X,Y,Z),lists,nth(X,Y,Z)).
|
||||
swi_predicate_table(_,delete(X,Y,Z),lists,delete(X,Y,Z)).
|
||||
swi_predicate_table(_,nth1(X,Y,Z),lists,nth(X,Y,Z)).
|
||||
swi_predicate_table(_,memberchk(X,Y),lists,memberchk(X,Y)).
|
||||
swi_predicate_table(_,flatten(X,Y),lists,flatten(X,Y)).
|
||||
swi_predicate_table(_,member(X,Y),lists,member(X,Y)).
|
||||
swi_predicate_table(_,append(X,Y),lists,append(X,Y)).
|
||||
swi_predicate_table(_,append(X,Y,Z),lists,append(X,Y,Z)).
|
||||
@ -316,26 +317,3 @@ prolog:intersection([_|T], L, R) :-
|
||||
prolog:(Term1 =@= Term2) :-
|
||||
variant(Term1, Term2), !.
|
||||
|
||||
%% flatten(+List1, ?List2) is det.
|
||||
%
|
||||
% Is true it List2 is a non nested version of List1.
|
||||
%
|
||||
% @deprecated Ending up needing flatten/3 often indicates,
|
||||
% like append/3 for appending two lists, a bad
|
||||
% design. Efficient code that generates lists
|
||||
% from generated small lists must use difference
|
||||
% lists, often possible through grammar rules for
|
||||
% optimal readability.
|
||||
|
||||
prolog:flatten(List, FlatList) :-
|
||||
flatten(List, [], FlatList0), !,
|
||||
FlatList = FlatList0.
|
||||
|
||||
flatten(Var, Tl, [Var|Tl]) :-
|
||||
var(Var), !.
|
||||
flatten([], Tl, Tl) :- !.
|
||||
flatten([Hd|Tl], Tail, List) :- !,
|
||||
flatten(Hd, FlatHeadTail, List),
|
||||
flatten(Tl, Tail, FlatHeadTail).
|
||||
flatten(NonList, Tl, [NonList|Tl]).
|
||||
|
||||
|
Reference in New Issue
Block a user