digitalmars.D.learn - cannot access frame of function
- Alex (24/24) Sep 18 2017 Hi all,
- user1234 (4/28) Sep 18 2017 asum is a lazy range and the error comes from this.
- ag0aep6g (15/23) Sep 18 2017 [...]>> auto asum = a[].sum;
- user1234 (3/28) Sep 18 2017 Aw right, i had put 1.23 directly in the lambda. So, OP, you can
- Alex (2/13) Sep 18 2017 So, this is a bug, isn't it? I assume, I should file it then...
- Jordan Wilson (33/48) Mar 22 2018 I have this same issue. Anyone have any thoughts on a workaround?
- Alex (3/5) Mar 23 2018 For completeness:
Hi all, given this code: import std.algorithm.iteration : sum, cumulativeFold; void main() { double[5] a; a = 0; foreach(el; a) assert(el == 0); a[0] = 1.0; a[1] = 2.0; a[2] = 3.0; a[3] = 4.0; a[4] = 5.0; foreach(el; a) assert(el != 0); auto asum = a[].sum; auto jProbs = a[].cumulativeFold!((a, b) => (a + b)/asum); } the last line does not compile. I found http://forum.dlang.org/post/mailman.4097.1499105927.31550.digitalmars-d-bugs puremagic.com and https://issues.dlang.org/show_bug.cgi?id=11886 What I do not understand, how my example differs from the fixed bug?
Sep 18 2017
On Monday, 18 September 2017 at 14:45:25 UTC, Alex wrote:Hi all, given this code: import std.algorithm.iteration : sum, cumulativeFold; void main() { double[5] a; a = 0; foreach(el; a) assert(el == 0); a[0] = 1.0; a[1] = 2.0; a[2] = 3.0; a[3] = 4.0; a[4] = 5.0; foreach(el; a) assert(el != 0); auto asum = a[].sum; auto jProbs = a[].cumulativeFold!((a, b) => (a + b)/asum); } the last line does not compile. I found http://forum.dlang.org/post/mailman.4097.1499105927.31550.digitalmars-d-bugs puremagic.com and https://issues.dlang.org/show_bug.cgi?id=11886 What I do not understand, how my example differs from the fixed bug?asum is a lazy range and the error comes from this. Let's say that if you replace asum by 1.23 then the code compiles.
Sep 18 2017
On 09/18/2017 08:25 PM, user1234 wrote:On Monday, 18 September 2017 at 14:45:25 UTC, Alex wrote:[...][...]>> auto asum = a[].sum; [...]import std.algorithm.iteration : sum, cumulativeFold; void main() { double[5] a;asum is a lazy range and the error comes from this.asum is not a range. It's a double.Let's say that if you replace asum by 1.23 then the code compiles.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); } ----
Sep 18 2017
On Monday, 18 September 2017 at 18:49:54 UTC, ag0aep6g wrote:On 09/18/2017 08:25 PM, user1234 wrote:Aw right, i had put 1.23 directly in the lambda. So, OP, you can dismiss my comment.On Monday, 18 September 2017 at 14:45:25 UTC, Alex wrote:[...][...]>> auto asum = a[].sum; [...]import std.algorithm.iteration : sum, cumulativeFold; void main() { double[5] a;asum is a lazy range and the error comes from this.asum is not a range. It's a double.Let's say that if you replace asum by 1.23 then the code compiles.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); } ----
Sep 18 2017
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...
Sep 18 2017
On Monday, 18 September 2017 at 21:58:39 UTC, Alex wrote:On Monday, 18 September 2017 at 18:49:54 UTC, ag0aep6g wrote: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, JordanDoesn'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...
Mar 22 2018
On Friday, 23 March 2018 at 03:38:22 UTC, Jordan Wilson wrote:I have this same issue. Anyone have any thoughts on a workaround?For completeness: https://issues.dlang.org/show_bug.cgi?id=17841
Mar 23 2018