Интересно, почему F-Sharp не поддерживает бесконечность.F-Sharp (F #) нетипизированная бесконечность
Это будет работать в Рубине (но не в 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 #. Существует бесконечность ключевое слово, но это поплавок:
let a = Math.bigint +infinity;;
System.OverflowException: BigInteger не может представлять бесконечность. в System.Numerics.BigInteger..ctor (двойное значение) на $ FSI_0045.main @() остановлен из-за ошибки
Edit:. Также это похоже на работу в итерации:
Является ли он выполнением целочисленной или с плавающей точкой арифметики? У этих двух есть совершенно разные понятия бесконечности. –
Это не работает в Ruby. Infinity - это значение с плавающей запятой в Ruby, поэтому вам нужно будет делать деление с плавающей запятой - 1..1.0/0. – Chuck
В этом конкретном случае «пусть числа n = seq {1 .. n}» могут быть самыми простыми ... –