list - 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)]]
顺便说一句,请注意将元素添加到列表的末尾是 O(n),因此您可以考虑将其添加到开头:
append' :: a -> [[a]] -> [[a]]
append' x = map ((:) x)
推荐阅读
- amazon-web-services - 从 aws s3 存储桶解析数据并将解析后的数据保存到另一个存储桶
- python-2.7 - 关于 Python 2.7 中列表列表的 SpaCy 问题
- c# - .NET 正则表达式与否定断言不匹配
- html - 如何使用 CSS 隐藏图库中的图像?
- haskell - 如何在 Haskell 代码中正确使用 min 函数?
- r - 当用户期望输入时,R给出错误
- ajax - Having trouble with capturing dynamically updated cart information for the dataLayer in Shopify when adding/removing quantities or products
- react-native - React native redux debugging on a physical device
- javascript - 地球引擎 getThumbURL 模糊图像
- reactjs - 重定向着陆页组件 5 秒