On Thursday, 14 May 2015 at 20:50:05 UTC, ivoras wrote:
I'm experimenting to get a feel for the language. Do you have a suggestion about this example code: https://goo.gl/F7LCAg to make it more "D-like", idiomatic?

Quoting from the code:

 for (int i = 0; i < count; i++) {

foreach(i; 0 .. count)

   try {
     auto choices = markov[current];
[...]
   } catch (RangeError e) {
     break;
   }

Don't catch Errors. Use the `in` operator to check if `current` is in `markov`:

if(current !in markov) break;

Or avoiding double lookup:

string[]* choicesp = current in markov;
if(choicesp is null) break;
auto choices = *choicesp;

int main(string[] args)

You cam omit the return type and `args` if you're not going to use them:

void main()

 foreach (c_line; stdin.byLine()) {
   auto line = to!string(c_line);

Could use byLineCopy:

foreach(line; stdin.byLineCopy)

     if (prev_token in markov) {
       markov[prev_token] ~= token;
     } else {
       markov[prev_token] = [token];
     }

I think you can just go with appending here:

markov[prev_token] ~= token;

But I'm not 100% sure about the implications.

Reply via email to