如何组合列表中列表中的所有列表元素?
例如
combine([[a,b,c],[d,[e,f],g],h],X).
return X = [a,b,c,d,e,f,g,h]
这就是我试过的
flat([], []).
flat([First|Rest], _X):-
flat(Rest, First).
答案 0 :(得分:0)
递归。
首先定义您的基本案例 - 如果您没有要合并的列表,则您有一个空列表。
combine([],[]).
如果您有一个元素,则您有一个单例列表
combine(X,[X]).
然后我们定义一般情况 - 非空列表
combine([X|Xs], Y) :-
首先,我们想要递归地压平头部
combine(X,XX),
然后是尾巴
combine(XS,XXs),
然后我们将这些放在一起
append(XX,XXs,Y).
我们必须仔细考虑如何将它们放在一起。单例元素的基本情况想要最后出现。当匹配规则Prolog将匹配第一个适用的规则时 - 带有singleton元素的基本情况将匹配一个列表,所以我们在这种情况下放置它以在这种情况下停止匹配。最后给我们:
combine([],[]).
combine([X|Xs],Y) :- combine(X,XX), combine(Xs,XXs), append(XX,XXs,Y).
combine(X,[X]).