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








 
  
  
 
 user1234 <user1234 12.hu>
 user1234 <user1234 12.hu> 