/// I can't do this
let max = float n |> sqrt |> int64 |> Math.BigInt
/// But this is allowed
let max = Math.BigInt(float n |> sqrt |> int64)
From stackoverflow
-
Class constructors cannot be used without arguments. You can write
let max = float n |> sqrt |> int64 |> (fun x -> Math.BigInt(x))if you like. (Offhand I don't know the reason for this restriction, though.)
Unknown : Is int64 a class?Brian : No, in this context it's a function defined in http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/manual/FSharp.Core/Microsoft.FSharp.Core.Operators.htmlUnknown : Also can you tell me where to find the square root for a BigInt?Brian : There is no Sqrt function defined for BigInt in the library.Unknown : @Brian do you know if there will be one?Brian : No, I don't think one is planned for .Net 4.0's System.Numerics.BigInteger. You can always author your own. -
In my version of F# (1.9.4.19 on Mono), both versions fail with:
The member or object constructor 'BigInt' takes 0 argument(s) but is here given 1. The required signature is 'Math.BigInt()'.I can use
let max = float n |> sqrt |> int64 |> Math.BigInt.of_int64to get a
bigintorlet max = float n |> sqrt |> int64 |> Math.BigInt.FromInt64to get a
Math.BigInt.
0 comments:
Post a Comment