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.