2017-04-02 50 views
2

我有这个功能扁平化的列表:(PROLOG)申请不重复的“扁平化”功能

flatten([], []) :- !. 
flatten([L|Ls], FlatL) :- 
    !, 
    flatten(L, NewL), 
    flatten(Ls, NewLs), 
    append(NewL, NewLs, FlatL), 
flatten(L, [L]). 

和“不重复”:

my_compress([], []):- !. 

my_compress([X|Xs], Ys):- 
      my_member(X, Xs), 
      !, 
      my_compress(Xs, Ys). 

my_compress([X|Xs], [X|Ys]):- 
      my_compress(Xs, Ys). 

我不知道我怎么能用这两个函数做一个函数。我想在没有重复但只有1个函数的情况下展开列表。

回答

0

您可以应用my_compress/2谓词扁平列表递归喜欢:

flatten([], []) :- !. 
flatten([L|Ls], FlatL) :- 
    !, 
    flatten(L, NewL), 
    flatten(Ls, NewLs), 
    append(NewL, NewLs, FL), 
    my_compress(FL,FlatL). 
flatten(L, [L]). 

例子:

?- flatten([1,1,1,[[2],2],2,[3],3],L). 
L = [1, 2, 3].