【问题标题】:Why does this function work in runghc but not in ghci? [duplicate]为什么此功能在 runghc 中有效,但在 ghci 中无效? [复制]
【发布时间】:2015-07-14 15:26:24
【问题描述】:

如果我运行以下文件:

ll []     = 0
ll (x:xs) = 1 + ll xs
main = putStrLn (show (ll [2,2,2]))

使用 runghc,它可以工作并打印 3。

在 ghci 中,我得到:

ghci> let ll [] = 0
ghci> let ll (x:xs) = 1 + ll xs
ghci> ll [3,4,43,9]
*** Exception: <interactive>:23:5-25: Non-exhaustive patterns in function ll

上面的代码在 ghci 中无法运行的原因是什么?需要进行哪些更改才能使其发挥作用?

【问题讨论】:

  • 还有thisthis。似乎是一个很常见的问题!

标签: haskell


【解决方案1】:

运行 ghci 时,您键入的所有内容都在 IO monad 中,因此您需要额外的 lets(您确实包含)。然而,这会导致复杂性。

每次使用“let”时,您都在重新定义函数。唯一重要的是最后一个

let ll (x:xs) = 1 + ll xs

所以你错过了另一个案例

let ll [] = 0

但是你可以在同一行定义两个,像这样

let ll [] = 0; ll (x:xs) = 1 + ll xs

【讨论】:

  • 也可以使用:{ :}进行多行定义。
  • 你也可以使用:set +m来开启多行输入,但是一定要记得缩进你的代码。点击返回几次以完成该块。
猜你喜欢
  • 2015-09-12
  • 2011-09-09
  • 2021-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-01
相关资源
最近更新 更多