Re: Most convenient way to write a loop with fixed length and no need for the index?

2017-09-09 Thread Martin Tschierschke via Digitalmars-d-learn

On Friday, 30 June 2017 at 08:19:07 UTC, Anton Fediushin wrote:
On Friday, 30 June 2017 at 07:44:45 UTC, Martin Tschierschke 
wrote:

What do I have to do, to make this work?

iota(number).each!...command_x(a...);command_y(b...);command_z(c..))



You can use it like this:
iota(10).each!((x) { command1(); command2(); ... });


I missed this syntax!



Or there is a short syntax (lambda):
iota(10).each!((x) => command1());




See http://dlang.org/spec/expression.html#Lambda for more info 
about lambdas.




Or is there something like number.times!{} possible?

You can write your own function. It is simple.
void times(alias fun)(size_t i) {
foreach(unused;0..i)
fun();
}

and use it like this:
10.times!({ writeln("yaaay"); });


Thank You! Ali and Anton!
D is so cool! :D

ps. This post was written but not send... on June 30...



Re: Most convenient way to write a loop with fixed length and no need for the index?

2017-06-30 Thread Anton Fediushin via Digitalmars-d-learn
On Friday, 30 June 2017 at 07:44:45 UTC, Martin Tschierschke 
wrote:

What do I have to do, to make this work?

iota(number).each!...command_x(a...);command_y(b...);command_z(c..))
 ^?
how to write the lambda?

Similar to the ruby (1..number).each{ commands...}

Don't want to write the following, because the index i is not 
used inside the loop

and this should be clear when reading it:

  for (i=0;i

You can use it like this:
iota(10).each!((x) { command1(); command2(); ... });

Or there is a short syntax (lambda):
iota(10).each!((x) => command1());

See http://dlang.org/spec/expression.html#Lambda for more info 
about lambdas.




Or is there something like number.times!{} possible?

You can write your own function. It is simple.
void times(alias fun)(size_t i) {
foreach(unused;0..i)
fun();
}

and use it like this:
10.times!({ writeln("yaaay"); });





Re: Most convenient way to write a loop with fixed length and no need for the index?

2017-06-30 Thread Ali Çehreli via Digitalmars-d-learn

On 06/30/2017 12:44 AM, Martin Tschierschke wrote:

What do I have to do, to make this work?

iota(number).each!...command_x(a...);command_y(b...);command_z(c..))
 ^?
how to write the lambda?

Similar to the ruby (1..number).each{ commands...}

Don't want to write the following, because the index i is not used
inside the loop
and this should be clear when reading it:

  for (i=0;i

Seems easy to put together: :)

import std.stdio;

auto times(alias Func, T)(T number) {
import std.range : iota;
import std.algorithm : each;
return number.iota.each!(_ => Func());
}

void foo() {
writeln("foo");
}

void bar() {
writeln("bar");
}

void main() {
3.times!({ foo(); bar(); });
}

Ali



Most convenient way to write a loop with fixed length and no need for the index?

2017-06-30 Thread Martin Tschierschke via Digitalmars-d-learn

What do I have to do, to make this work?

iota(number).each!...command_x(a...);command_y(b...);command_z(c..))
 ^?
how to write the lambda?

Similar to the ruby (1..number).each{ commands...}

Don't want to write the following, because the index i is not 
used inside the loop

and this should be clear when reading it:

  for (i=0;i