cannot access frame of function

Jordan Wilson wilsonjord at gmail.com
Fri Mar 23 03:38:22 UTC 2018


On Monday, 18 September 2017 at 21:58:39 UTC, Alex wrote:
> On Monday, 18 September 2017 at 18:49:54 UTC, ag0aep6g wrote:
>>
>> Doesn't work for me. This still fails compilation with the 
>> same error:
>>
>> ----
>> import std.algorithm.iteration : sum, cumulativeFold;
>> void main()
>> {
>>     double[5] a;
>>     auto asum = 1.23;
>>     auto jProbs = a[].cumulativeFold!((a, b) => (a + b)/asum);
>> }
>> ----
>
> So, this is a bug, isn't it? I assume, I should file it then...

I have this same issue. Anyone have any thoughts on a workaround?

For example, my attempt at an exponential moving average doesn't 
compile:
auto ema(Range,T) (Range rng, int period, T seed) {
     return rng.cumulativeFold!((a,b) => 
a+(2.0/(period+1))*(b-a))(seed.to!double);
}

So I ended up with this:
auto ema(Range,T) (Range rng, int period, T seed) {
     struct EMA(Range) {
         double currentValue;
         double weighting;
         Range rng;
         this (Range r, int p, double s) {
             currentValue = s;
             weighting = 2.0 / (p+1);
             rng = r;
         }
         auto front() { return currentValue; }
         auto popFront() {
             rng.popFront;
             if (!rng.empty){
                 currentValue += (rng.front - 
currentValue)*weighting;
             }
         }
         auto empty() { return rng.empty; }
     }
     return EMA!Range(rng,period,seed.to!double);
}

Thanks,

Jordan




More information about the Digitalmars-d-learn mailing list