Haskell:如何附加到元组列表列表?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Haskell:如何附加到元组列表列表?相关的知识,希望对你有一定的参考价值。

对不起,我刚开始学习Haskell。我不明白如何将元组附加到每个子列表。

我目前的名单是:

[[("String", "String", 2.0)],[("String", "String", 2.0),("String", "String", 2.0)]]

我想在每个子列表中添加一个元组,所以我的新列表是:

[[("String", "String", 2.0),("String","String",0.0)],[("String", "String", 2.0),("String", "String", 2.0),("String","String",0.0)]]

我正在尝试编写一个函数,但它一直在给我一个错误

append :: a -> [a] -> [a]
append i (x:xs) = x : append i xs
append i [] = i : []

然后我做:

map append ("String","String",0.0)

这给了我很多错误,比如错误的“类型匹配”。我不知道如何在Haskell中附加。

答案

[[("String", "String", 2.0)],[("String", "String", 2.0),("String", "String", 2.0)]]的类型是Fractional t => [[(String, String, t)]],或简化[[(String, String, Double)]]

因此,为了将元素附加到每个嵌套列表,我们需要有一个函数(String, String, Double) -> [[(String, String, Double)]] -> [[(String, String, Double)]]。换句话说,a -> [[a]] -> [[a]]

append :: a -> [[a]] -> [[a]]
append x xs = map (xss -> xss ++ [x]) xs

最后

> append ("String","String",0.0) [[("String", "String", 2.0)],[("String", "String", 2.0),("String", "String", 2.0)]]
[[("String","String",2.0),("String","String",0.0)],[("String","String",2.0),("String","String",2.0),("String","String",0.0)]]

顺便说一下,请注意在列表末尾添加元素是On),您可以考虑将其添加到开头:

append' :: a -> [[a]] -> [[a]]
append' x = map ((:) x)

以上是关于Haskell:如何附加到元组列表列表?的主要内容,如果未能解决你的问题,请参考以下文章

如何将列表合并到元组列表中?

将列表作为单个元素插入到元组中

scala zip列表到元组

Scala:将 Map 映射到元组列表

Python列表操作:将前任和后继组合到元组中

在 Python 中查找输入字符串到元组列表的所有可能匹配项(以任何顺序/顺序)