如何在列表中组合列表中的所有列表元素?
例子
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).
如何在列表中组合列表中的所有列表元素?
例子
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).
递归。
首先定义您的基本案例 - 如果您没有要组合的列表,则您有一个空列表。
combine([],[]).
如果你有一个元素,你有一个单例列表
combine(X,[X]).
然后我们定义一般情况——一个非空列表
combine([X|Xs], Y) :-
首先我们要递归地展平头部
combine(X,XX),
然后是尾巴
combine(XS,XXs),
然后我们把这些放在一起
append(XX,XXs,Y).
我们必须仔细考虑如何将它们组合在一起。单例元素的基本情况希望最后出现。当匹配规则时,Prolog 将匹配第一个适用的规则 - 带有单例元素的基本情况将匹配一个列表,因此我们将其放在这种情况之后以停止它在这种情况下的匹配。最后给我们:
combine([],[]).
combine([X|Xs],Y) :- combine(X,XX), combine(Xs,XXs), append(XX,XXs,Y).
combine(X,[X]).