【问题标题】:How to fix 'Non-exhaustive patterns in function' error in haskell?如何修复haskell中的“函数中的非详尽模式”错误?
【发布时间】:2019-01-10 23:00:48
【问题描述】:

我正在尝试创建一个函数,该函数将元组列表作为参数并按第二个元素排序。它不会打印任何其他内容,只是错误“*** Exception: main.hs:20:1-76: Non-exhaustive patterns in function sortWords” 代码如下:

sortWords :: [(String, Int)] -> [(String, Int)]

sortWords [(str,num)] = sortBy (\x y -> compare (snd x) (snd y)) [(str,num)]`

这是我调用函数的方式

main = do
    putStrLn $ show $ sortWords [("friend",1),("she",2)]

我不得不说我在http://Repl.it网站上运行我的程序

谢谢!

【问题讨论】:

  • 该模式只匹配只有一个元素的列表。
  • 那么如何创建一个模式来匹配列表中的多个元素? @DannyuNDos
  • @s_diaconu 请为您的新问题创建另一个问题。
  • 使用-Wall 启用警告,GHC 会指出丢失的案例。

标签: haskell tuples


【解决方案1】:
sortWords [(str,num)] = 

您的函数定义(上图)模式匹配包含单个元素的列表,该元素是一个元组,其中每个值都有变量。

您似乎只想要一个变量而不是模式匹配:

sortWords xs  = sortBy (\x y -> compare (snd x) (snd y)) xs

或 eta 减少:

sortWords = sortBy (\x y -> compare (snd x) (snd y))

【讨论】:

  • 非常感谢您的回答。我从来没有想过不提出论点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多