我正在尝试“展开”-(我认为),从一个初始值开始,反复对其应用一些函数,然后得到一个序列作为结果。

在这个例子中,我试图从 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)) 


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!