这看起来非常简单和微不足道,但我今天早上在Google上找不到任何答案。
我正在将我在短短几分钟内制作的这个愚蠢的C#转换成F#(这是对挑战的答案):
private static readonly int MaxAge = 131;
private static int[] Numbers = new int[MaxAge];
static void Main()
{
Random random = new Random(130);
for ( int i = 1; i < 1000000 - 1; i++) Numbers[random.Next(1,MaxAge )] += 1;
for ( int i = 1;i <= Numbers.Length - 1; i++) Console.WriteLine( "{0}: {1}", i, Numbers[i]);
Console.ReadLine();
}
在F#中,我从这开始:
let r = new Random()
let numbers = Array.create 131 int
let x = for i in 1 .. 100000 do
let rn =r.Next(1,130)
numbers.[rn] <- numbers.[rn] + 1
然而,+ 1会产生一个我无法理解的错误: 错误1类型'int'与'a - &gt;类型不匹配INT'
我的目的只是在任意给定索引上随机增加1到131之间的值,从而模拟1到131之间的一百万个随机整数并将它们放入桶中。
有人能在这里给我提供facepalm时刻吗?
答案 0 :(得分:2)
您在Array.create中缺少返回整数值的生成器函数。 &#39; INT&#39;是一个将obj转换为int的函数值,因此您创建了一系列函数。 您可以使用整数值(如
)初始化数组let numbers = Array.create 131 0
创建零数组。或者你可以使用任何其他函数,返回int值 你也可以这样用F#生成数组:
let numbers = [|for i in 1 .. 131 -> 0|]
您也可以使用任何生成器函数,而不是0:
let numbers = [|for i in 1 .. 131 -> i * i|]
但在这种情况下最简单的方法是
Array.zeroCreate 131