Re: lockstep works with .each, but fails with .map

2021-03-05 Thread realhet via Digitalmars-d-learn

On Friday, 5 March 2021 at 19:26:38 UTC, Jacob Carlborg wrote:

On 2021-03-05 19:49, realhet wrote:


Why it works with each (or foreach), but not with map? o.O


`lockstep` is specifically designed to work with `foreach`. I 
think `each` has a special case to work with `lockstep`. If you 
want to use other range functions, you should use `zip` instead 
of `lockstep`.


It works now:

  zip(StoppingPolicy.requireSameLength, a, b).map!(a => 
SE(a[])).sum / float(a.length);


I had a misconception (lazyness of learning) that zip is making a 
simple array, not a tuple array like I guessed lockstep does.


Also in zip() the StoppingPolicy is the first parameter and in 
lockstep() it's the last.


Thank you very much!


Re: lockstep works with .each, but fails with .map

2021-03-05 Thread Jacob Carlborg via Digitalmars-d-learn

On 2021-03-05 19:49, realhet wrote:


Why it works with each (or foreach), but not with map? o.O


`lockstep` is specifically designed to work with `foreach`. I think 
`each` has a special case to work with `lockstep`. If you want to use 
other range functions, you should use `zip` instead of `lockstep`.


--
/Jacob Carlborg


lockstep works with .each, but fails with .map

2021-03-05 Thread realhet via Digitalmars-d-learn

Hi
What am I doing wrong here?

import std.stdio, std.range, std.algorithm, std.uni, std.utf, 
std.conv, std.typecons, std.array;


auto SE(A, B)(in A a, in B b){
return (a-b)^^2;
}

void main(){
auto a = [1, 2, 3], b = [1, 1, 1];
lockstep(a, b, StoppingPolicy.requireSameLength).each!((a, 
b){ writeln(SE(a, b)); });
lockstep(a, b, StoppingPolicy.requireSameLength).map !((a, 
b){ return  SE(a, b) ; }).each!writeln;  <- error here

}

The error:
map(Range)(Range r)
  with Range = Lockstep!(int[], int[])
  must satisfy the following constraint:
   isInputRange!(Unqual!Range)

Why it works with each (or foreach), but not with map? o.O

I just wanted to make a Sum of squared errors function.

Thanks in advance!