2017-04-02 3 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). 

私はどのように私ができる見当がつかないこれら2つの関数で関数を作ります。私は反復せずに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]. 
関連する問題