2017-04-02 46 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].