gpt4 book ai didi

haskell - 不清楚为什么不公开Data.Ratio的功能以及如何解决

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

我正在使用Data.Ratio(convergents of continued fractions)实现算法。
但是,我遇到两个障碍:

  • 该算法以分数1%0开头-但这会引发零分母异常。
  • 我想模式匹配构造函数a :% b

  • 我正在探索 hackage。特别是 source似乎正好在使用这些功能(例如定义 infinity = 1 :% 0numerator的模式匹配)。
    作为初学者,我对确定向我公开了 (%)numerator等而不是 infinity(:%)感到困惑。
    我已经使用整数元组做了一个肮脏的解决方法,但是重新发明如此琐碎的东西似乎很愚蠢。
    学习如何阅读公开了哪些功能的源代码也将是一件很好的事情。

    最佳答案

    它们的输出并不是为了防止人们做这样的事情。看,类型

    data Ratio a = a:%a
    包含太多值。特别是例如 2/63/9实际上在ℚ中是相同的数字,并且都由 1:%3表示。因此, 2:%6实际上是一个非法值,而 1:%0确实是一个非法值。还是合法的,但是所有函数都知道如何对待它们,因此 2:%6对于等于 1:%3的所有可观察的方法都是有效的–我实际上不知道GHC选择了哪些选项,但是无论如何它都是实现细节,并且可能会改变将来的版本,恕不另行通知。
    如果图书馆作者自己使用此类值,例如优化技巧是一回事–它们对所有算法细节和可能出现的任何未定义行为都具有完全控制权。但是,如果用户必须构造这样的值,则会导致代码变脆。
    因此,如果您发现自己使用 1/0开始算法,那么您确实不应该在所有地方都使用 Ratio,而只需将分子和分母存储在一个简单的元组中,这样就不会出现此类问题,而只需将最终结果作为带有 Ratio%即可。

    关于haskell - 不清楚为什么不公开Data.Ratio的功能以及如何解决,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63297621/

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