www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Most convenient way to write a loop with fixed length and no need for

reply Martin Tschierschke <mt smartdolphin.de> writes:
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<number;i++){commands...}

or

   foreach(i;iota(number)){commands...}

Or is there something like number.times!{....} possible?
Jun 30 2017
next sibling parent =?UTF-8?Q?Ali_=c3=87ehreli?= <acehreli yahoo.com> writes:
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<number;i++){commands...}

 or

   foreach(i;iota(number)){commands...}

 Or is there something like number.times!{....} possible?
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
Jun 30 2017
prev sibling parent reply Anton Fediushin <fediushin.anton yandex.ru> writes:
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<number;i++){commands...}

 or

   foreach(i;iota(number)){commands...}
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"); });
Jun 30 2017
parent Martin Tschierschke <mt smartdolphin.de> writes:
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...
Sep 09 2017