(PROLOG)在“展平”功能中不重复使用

时间:2017-04-02 20:34:45

标签: 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个函数中。

1 个答案:

答案 0 :(得分: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].