【问题标题】:Combine all of the elements from list of the lists [duplicate]合并列表列表中的所有元素[重复]
【发布时间】:2013-06-01 04:55:54
【问题描述】:

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

例子

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

【问题讨论】:

标签: prolog


【解决方案1】:

递归。

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

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

【讨论】:

  • 这种实现似乎相当低效。你测试了吗?
  • 这对我有很大帮助。非常感谢。
  • 顺便说一句,我确实对您的代码进行了一些修改。 :P
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-11
  • 2018-11-03
  • 2015-09-02
  • 2021-04-22
  • 1970-01-01
  • 2021-06-13
  • 2018-05-15
相关资源
最近更新 更多