1

如何在列表中组合列表中的所有列表元素?

例子

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).
4

1 回答 1

0

递归。

首先定义您的基本案例 - 如果您没有要组合的列表,则您有一个空列表。

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]).
于 2013-06-05T13:18:30.323 回答