gpt4 book ai didi

Haskell 返回 Either Double Bool

转载 作者:行者123 更新时间:2023-12-02 07:33:28 25 4
gpt4 key购买 nike

我有简单的代码

delta a b c = b*b - (4*a*c)

mz1 :: Double -> Double -> Double -> Double
mz1 a b c = (-b - sqrt(delta a b c)) / (2*a)

mz2 :: Double -> Double -> Double -> Double
mz2 a b c = (-b + sqrt(delta a b c)) / (2*a)

mz0 :: Double -> Double -> Double -> Double
mz0 a b c = (-b) / (2*a)

kwad :: (Enum a) => a -> a -> a -> Either Double Bool
kwad a b c
| delta a b c == 0 = Left mz0 a b c
| delta a b c < 0 = Right False
| otherwise = Left mz1 a b c

我刚开始学习 Haskell,我不知道如何返回 Bool 或 Double,有人可以帮忙吗?

错误是:

Couldn't match expected type `a -> a -> a -> Either Double Bool'
with actual type `Either (Double -> Double -> Double -> Double) >b0'
The function `Left' is applied to four arguments,
but its type `(Double -> Double -> Double -> Double)
-> Either (Double -> Double -> Double -> Double) b0'
has only one

最佳答案

您的kwad 函数具有三个类型为Enum a => a 的参数。换句话说,他们可以接受任何 a,只要它是可枚举的。您的 mz 函数期望它们的值是 Double 类型。我建议更改 kwad 的类型签名,以便它采用 Double 参数,如下所示:

kwad :: Double -> Double -> Double -> Either Double Bool

这保证了您放入 kwad 的值是 Double,因此也适用于您的 mz 函数!


您还需要将 Left 的参数括在括号中,如下所示:

Left (mz0 a b c)

这意味着您要将整个 mz0 a b c 结果放入 Left,而不是其他任何东西。

关于Haskell 返回 Either Double Bool,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19389576/

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