如何生成指数权重数组?

fs_*_*ech 2 f#

我试图做一个"展开" - (我认为),从一个初始值开始,重复应用一些函数,然后得到一个序列作为结果.

在这个例子中,我试图从1.0开始,将它乘以.80,并做4次,这样我最终得到一个数组= [| 1.0; 0.80; 0.64; 0.512 |]

VS 2010说我以无效的方式使用"i",并且闭包不能捕获可变值 - 所以这个函数不能编译.任何人都可以建议一个真正有效的干净方法吗?谢谢.

let expSeries seed fade n = 
//take see and repeatedly multiply it by the fade factor n times...
    let mutable i = 0;
    let mutable weight = seed;
    [| while(i < n) do
          yield weight;
          weight <- weight * fade |]

let testWeights = expSeries 1.0 0.80 4
Run Code Online (Sandbox Code Playgroud)

nlu*_*oni 7

let exp_series seed fade n =  
    Array.init (n) (fun i -> seed * fade ** (float i))
Run Code Online (Sandbox Code Playgroud)

  • 虽然我喜欢这种方法,但这并不是非常惯用的F#(并且不能在F#1.9.9.9上编译); 更常见的是,使用`*`代替`*.`和`float`代替`float_of_int`. (2认同)