gpt4 book ai didi

haskell - 当你执行 `Infinity` 时,我们如何利用 Haskell 返回的 `2/0`

转载 作者:行者123 更新时间:2023-12-02 21:30:19 24 4
gpt4 key购买 nike

我知道 Haskell 试图做一些比简单地在除以零时抛出错误更有益的事情

test :: Int -> Int -> String
test a b = case a/b of
Infinity -> "fool"
x -> Show x

但是我被告知我的 ghc Infinity 不是数据构造函数。它实际上是什么以及我如何利用它?我不想简单地检查 b 是否为 0

最佳答案

有几种方法可以做到这一点。我更喜欢使用 isInfinite前奏:

test :: Int -> Int -> String
test a b = case fromIntegral a / fromIntegral b of
x | isInfinite x && x > 0 -> "fool"
| otherwise -> show x

或者,您可以定义无穷大,如 this question 所示。并比较是否相等(因为Infinity == Infinity)。

<小时/>

您的代码还有一些我认为与您的问题无关的问题:

  • 显示应为显示
  • (/) 不适用于 Int 参数,因此您需要使用 fromIntegral 转换 a > 和 b 到 float 的东西

我还怀疑您知道这个特定的函数不需要无限检查...

test :: Int -> Int -> String
test a 0 | a > 0 = "fool"
| otherwise = show (fromIntegral a / fromIntegral b)

关于haskell - 当你执行 `Infinity` 时,我们如何利用 Haskell 返回的 `2/0`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47427422/

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