gpt4 book ai didi

haskell - 如何在 Haskell 函数中使用错误?

转载 作者:行者123 更新时间:2023-12-02 17:09:58 26 4
gpt4 key购买 nike

我正在使用 GHCI 7.10.3,但在简单的阶乘代码中遇到错误。

我想做这样的事情:

fatorial n
| n == 0 = 1
| n > 0 = n * fatorial(n-1)
| otherwise = error "My error"

但是当fatorial -4被调用时,输出是:

:21:1: Non type-variable argument in the constraint: Num (a -> a) (Use FlexibleContexts to permit this) When checking that ‘it’ has the inferred type it :: forall a. (Num a, Num (a -> a), Ord a) => a -> a

我的代码没有最后一行就可以正常工作。那么如何在 haskell 中使用错误消息呢?

最佳答案

这个错误是一个类型错误,所以这意味着 Haskell 认为你写的内容没有意义(从类型系统的角度来看)。

它将 - 解释为“二元减号运算符”,例如:

--         v operator
factorial - 4
-- ^ operand ^

所以 Haskell 认为你想从 factorial 中减去 4,但它没有看到 factorial 是一个 Num code>ber,因此出现错误。严格来说,只要实现Num typeclass,就可以创建数字函数。 (以及 EqShow 类型类)我们很好。

如果要在此类函数调用中使用负数文字,则需要使用括号,例如:

factorial <b>(-4)</b>

这会产生:

Prelude> fatorial (-4)
*** Exception: My error
CallStack (from HasCallStack):
error, called at <interactive>:5:19 in interactive:Ghci1

现在它会引发您的错误“My error”(请参阅第一条输出行)。

关于haskell - 如何在 Haskell 函数中使用错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51734644/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com