Thread overview
Is there an elegant way of making a Result eager instead of lazy?
Mar 20, 2012
ixid
Mar 20, 2012
simendsjo
Mar 20, 2012
bearophile
Mar 20, 2012
Ali Çehreli
Mar 20, 2012
H. S. Teoh
Mar 20, 2012
ixid
March 20, 2012
I understand the point of lazy evaluation but I often want to use the lazy algorithm library functions in an eager way. Other than looping through them all which feels rather messy is there a good way of doing this?

Is there a reason not to allow the following to be automatically treated eagerly or is there some kind of cast or conv way of doing it?

	int[] test1 = [1,2,3,4];
	int[] test2 = map!("a + a")(test1); //Eager, not allowed

	auto test3 = map!("a + a")(test1); //Lazy
March 20, 2012
On Tue, 20 Mar 2012 18:36:46 +0100, ixid <nuaccount@gmail.com> wrote:

> I understand the point of lazy evaluation but I often want to use the lazy algorithm library functions in an eager way. Other than looping through them all which feels rather messy is there a good way of doing this?
>
> Is there a reason not to allow the following to be automatically treated eagerly or is there some kind of cast or conv way of doing it?
>
> 	int[] test1 = [1,2,3,4];
> 	int[] test2 = map!("a + a")(test1); //Eager, not allowed
>
> 	auto test3 = map!("a + a")(test1); //Lazy

std.array includes a method, array(), for doing exactly this:
int[] test2 = array(map!"a+a"(test1)); //eager
March 20, 2012
simendsjo:

> std.array includes a method, array(), for doing exactly this:
> int[] test2 = array(map!"a+a"(test1)); //eager

With 2.059 you can write that also in a more readable way, because there is less nesting:

int[] test2 = test1.map!q{a + a}().array();

Bye,
bearophile
March 20, 2012
Thanks, very handy!


March 20, 2012
On 03/20/2012 10:50 AM, bearophile wrote:
> simendsjo:
>
>> std.array includes a method, array(), for doing exactly this:
>> int[] test2 = array(map!"a+a"(test1)); //eager
>
> With 2.059 you can write that also in a more readable way, because there is less nesting:
>
> int[] test2 = test1.map!q{a + a}().array();

Going off-topic but there is also the new => lambda syntax:

    int[] test2 = test1.map!(a => a + a)(test1).array();

Although, it makes it longer in cases like the one above. :)

By the way, is there a name for "the => syntax"?

>
> Bye,
> bearophile

Ali

March 20, 2012
On Tue, Mar 20, 2012 at 02:52:05PM -0700, Ali Çehreli wrote: [...]
> By the way, is there a name for "the => syntax"?
[...]

You just named it. :-)


T

-- 
"Real programmers can write assembly code in any language. :-)" -- Larry Wall