【发布时间】:2018-11-15 16:21:43
【问题描述】:
我是 learning Haskell,正在尝试理解列表。
从研究到将元素添加到列表中,您通常会这样做:
let numbers = [4,8,15,16,23,42]
numbers ++ [56]
但要引用this answer:
如果您需要这样做,通常有更好的方法来构建 你的算法。例如,您可以按相反的顺序构建您的
list(在开头添加元素),最后只调用reverse。
代码:
let numbers = [23,43,56]
let newNumbers = 69:numbers
reverse newNumbers
输出:
[56,43,23,69]
问题:
- 根据引用的答案,我编写的代码是否正确?
- 我想更好地理解术语,我可以说我正在向
list的head添加元素吗?据我了解,每一个新元素都是第一个元素,当我写head newNumbers时返回的值。
【问题讨论】:
-
这并不意味着“在你添加每个 itme 之后调用
reverse”;这并不比使用++附加项目更好。相反,这意味着如果您想通过在末尾添加新项目来构建列表,则应将它们放在开头,并在需要消耗整个列表时调用 reverse。 -
@chepner - 所以在这种情况下,如果我只想将
69添加到列表中,我是否按照报价正确地完成了它?这也让我想知道,您如何将多个元素添加到列表的开头?猜猜这是另一个可以尝试的练习。 -
这真的取决于你打算如何使用这个列表。例如,请参阅我的答案。
-
有时您必须将一个列表附加到另一个列表,更糟糕的是,您可能需要将新列表附加到结果列表数千次。这将是一个非常昂贵的操作。为了克服这种成本差异,使用了列表数据结构。 This question is all about that
-
这不是关于haskell的问题,而是关于stackoverflow问题的问题。添加标签使查找有关 haskell 的问题变得更加困难。这也不是关于“添加”的问题