我正在尝试“展开”-(我认为),从一个初始值开始,反复对其应用一些函数,然后得到一个序列作为结果。
在这个例子中,我试图从 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
请您参考如下方法:
let exp_series seed fade n =
Array.init (n) (fun i -> seed * fade ** (float i))