Elm有无穷大的常量吗?

4

2
你对无穷大的使用场景是什么?Elm支持它作为浮点类型的一部分,JavaScript也是如此,但在许多情况下,使用丰富的数据类型会更好,不是吗? - Zimm i48
实现归并排序,需要在合并函数中使用它。另一种选择也会很有用。 - mand
我非常确定,在实现归并排序时,您不需要无穷大(也不需要最大边界)。事实上,在Elm中,您甚至可以实现一个多态的合并函数,用于任何两个可比较列表的合并。 - Zimm i48
你是正确的,我在这里找到了它:http://elm-lang.org/examples/merge-sort 我仍然在以命令式方式思考,但是我很好奇如何访问无限。 - mand
3
你可以使用函数 isInfinite 来检查任何一个 Float 的值。http://package.elm-lang.org/packages/elm-lang/core/5.1.1/Basics#isInfinite - wintvelt
2个回答

2

我看到你已经有了一个答案,但是这里有一种使用Maybe来模拟无穷大的方法。

infinity =
    Nothing


lessThan : Int -> Maybe Int -> Maybe Int
lessThan x y =
    case y of
        Just y_ ->
            if x < y_ then
                Just x

            else
                y

        Nothing ->
            Just x

这太棒了,所以您使用无限制的“Nothing”而不是“Infinity”,但是为了澄清,“Nothing”是什么?JS未定义或null?“Nothing”不等于零吗? - mand

0
如果你要在Elm中对整数进行无限建模,我建议重用Maybe,因为接受的答案不明确且不是一个很好的选择。相反,最好为这种情况创建一个更明确的自定义类型:
type MaybeInfiniteInt 
  = Finite Int
  | Infinite

min : Int -> MaybeInfiniteInt -> MaybeInfiniteInt
min xInt y = 
  case y of
     Finite yInt ->
        if xInt < yInt then
           Finite xInt

        else 
           y

     Infinte ->
         Finite xInt

{-| Note the argument order is designed for reading in a pipe: y |> moreThan x
-}
moreThan : Int -> MaybeInfiniteInt -> MaybeInfiniteInt
moreThan xInt y = 
  case y of
     Finite yInt ->
        yInt > xint

     Infinte ->
         True

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接