【问题标题】:Haskell issue with tuples元组的 Haskell 问题
【发布时间】:2015-12-18 17:22:09
【问题描述】:

我在 Haskell 中创建了一个函数,其中我有一个元组列表,并且只想提取每个元组的第二个值并返回元组的第二个值的列表。我写了这个函数,但我得到了一个奇怪的错误..

   --converts a list of tuples to single list
tupleToList :: [Stat] -> [Int]
tupleToList ((a,b):xs) =  b : tupleToList xs

我在第二行 (a,b) 之后的 ':' 上出现错误。任何想法可能导致问题?该函数本身对我来说似乎没有错,但我是 Haskell 的新手,所以可能有些事情我没有正确遵循。

【问题讨论】:

  • 顺便说一下,'Stat' 是一种类型,它是以下形式的元组:(String,Int)
  • “我得到一个错误” - 什么错误?代码对我来说也很好。也许包括一个最小的工作示例(包括导入、类型定义等)。
  • 你所拥有的是在这里工作,所以错误可能在你的文件中的其他地方 - 顺便说一句:似乎你只想要 tupleToList = map snd 反正
  • @HassanAli 您发布的代码中没有解析错误。同样,请提供一个最低限度的工作示例。
  • 我赞成使用map snd 。您的版本不处理空列表,因此最终会出错。

标签: list haskell tuples


【解决方案1】:

正如其他人所说,您所写的内容似乎没有任何错误(除了我注意到的:您不处理空列表的情况。)

你在 cmets 中问过如何重写它。

最简单的方法就是照卡斯滕说的去做

tupleToList = map snd

如果出于某种原因您想在自己的版本上构建。

tupleToList :: [Stat] -> [Int]
tupleToList [] = []
tupleToList ((a,b):xs) =  b : tupleToList xs

【讨论】:

    【解决方案2】:

    你可以像这样非常简单地做到这一点:

    tupleToList = map snd
    

    结果:

    > tupleToList [(1,"a"),(2,"b"),(3,"c")]
    ["a","b","c"]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 2018-04-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多