我试图创建一个随机小数,如下所示:
type Fraction=
{
num: int
den: int
}
let makeRandomFraction i =
let n= fun i -> System.Random(i).Next(-50, 51)
let d= fun i -> System.Random(i*3).Next(-50, 51)
{num=n; den=d}
但是我遇到一个错误:
error FS0001: This expression was expected to have type
'int'
but here has type
'int -> int'
能否请您说明错误以及执行所需操作的正确方法。
答案 0 :(得分:3)
该错误表示您正在传递一个预期为from sklearn.utils import shuffle
# if df is the dataframe to then:
n = 10 # number of rows to shuffle
shuffled_df = shuffle(df[:n]).append(df[n:])
的函数(类型为int -> int
)。您可以通过以下类似方式更清楚地看到这一点:
int
这里的解决方案是仅取出let add a b = a + b
let inc x = x + 1
inc add
// ^^^
// This expression was expected to have type 'int' but has type 'int -> int -> int'
部分。那是lambda的(其他)语法,但是由于您的fun i ->
变量已经在范围内,因此无需围绕它创建一个函数。
答案 1 :(得分:2)
出于好奇,您对要生成函数的分数的范围和分布有任何要求吗?当前编写代码的方式-通过在-50 .. 50范围内编写两个随机数,您将获得大多数数字接近零的分布。
以下是使用XPlot F#库构建的简单直方图:
open XPlot.GoogleCharts
type Fraction=
{ num: int
den: int }
let makeRandomFraction i =
let n = System.Random(i).Next(-50, 51)
let d = System.Random(i*3).Next(-50, 51)
{num=n; den=d}
[ for i in 0 .. 100000 -> let f = makeRandomFraction i in float f.num / float f.den ]
|> Seq.filter (System.Double.IsInfinity >> not)
|> Seq.countBy (fun f -> int f)
|> Chart.Column