我想知道为什么 F-Sharp 不支持无穷大。
这适用于 Ruby(但不适用于 f#):
let numbers n = [1 .. 1/0] |> Seq.take(n)
-> System.DivideByZeroException:试图除以零。
我可以以非常复杂的方式编写相同的功能:
let numbers n = 1 |> Seq.unfold (fun i -> Some (i, i + 1)) |> Seq.take(n)
-> 作品
但是我认为第一个会更清楚。我找不到在 F# 中使用动态类型无穷大的简单方法。有 infinity 关键字,但它是浮动的:
let a = Math.bigint +infinity;;
System.OverflowException:BigInteger 不能表示无穷大。在 System.Numerics.BigInteger..ctor(Double value) at .$FSI_0045.main@() 由于错误而停止
编辑:这似乎也适用于迭代:
let numbers n = Seq.initInfinite (fun i -> i+1) |> Seq.take(n)