Re: [your code here] Pure RPN calculator

2017-07-28 Thread Vladimir Panteleev via Digitalmars-d

On Wednesday, 26 July 2017 at 09:45:07 UTC, Timon Gehr wrote:

import std.stdio,std.string,std.algorithm,std.conv;
void main(){
readln.split.fold!((stack,op){
switch(op){
static foreach(c;"+-*/") case [c]:
return stack[0..$-2]~mixin("stack[$-2] "~c~" 
stack[$-1]");

default: return stack~op.to!real;
}
})((real[]).init).writeln;
}


That's pretty great!

Submitted:
https://github.com/dlang/dlang.org/pull/1848


Re: [your code here] Pure RPN calculator

2017-07-26 Thread Patrick Schluter via Digitalmars-d

On Wednesday, 26 July 2017 at 17:12:00 UTC, Mike Wey wrote:

On 26-07-17 16:40, Iakh wrote:

On Wednesday, 26 July 2017 at 09:46:45 UTC, Timon Gehr wrote:

 readln.split.fold!((stack,op){
 switch(op){
 static foreach(c;"+-*/") case [c]:
 return stack[0..$-2]~mixin("stack[$-2] 
"~c~" stack[$-1]");

 default: return stack~op.to!real;
 }
 })((real[]).init).writeln;


What does "case [c]:" mean?



In the static foreach c is a `immutable char` by putting it 
between [ and ] you create an array of immutable characters 
(string).


That's why some comments in the code would go a long way in 
lifting such issues.


Re: [your code here] Pure RPN calculator

2017-07-26 Thread Mike Wey via Digitalmars-d

On 26-07-17 16:40, Iakh wrote:

On Wednesday, 26 July 2017 at 09:46:45 UTC, Timon Gehr wrote:

 readln.split.fold!((stack,op){
 switch(op){
 static foreach(c;"+-*/") case [c]:
 return stack[0..$-2]~mixin("stack[$-2] "~c~" 
stack[$-1]");

 default: return stack~op.to!real;
 }
 })((real[]).init).writeln;


What does "case [c]:" mean?



In the static foreach c is a `immutable char` by putting it between [ 
and ] you create an array of immutable characters (string).


--
Mike Wey


Re: [your code here] Pure RPN calculator

2017-07-26 Thread Iakh via Digitalmars-d

On Wednesday, 26 July 2017 at 09:46:45 UTC, Timon Gehr wrote:

 readln.split.fold!((stack,op){
 switch(op){
 static foreach(c;"+-*/") case [c]:
 return stack[0..$-2]~mixin("stack[$-2] "~c~" 
stack[$-1]");

 default: return stack~op.to!real;
 }
 })((real[]).init).writeln;


What does "case [c]:" mean?



Re: [your code here] Pure RPN calculator

2017-07-26 Thread Timon Gehr via Digitalmars-d

On 26.07.2017 11:45, Timon Gehr wrote:

On 26.07.2017 04:37, Seb wrote:

On Tuesday, 25 July 2017 at 21:13:54 UTC, Max Haughton wrote:

Semi-Functional/pure RPN calculator: https://run.dlang.io/is/JGkBZx

This is probably too long, but it demonstrates the compiler enforced 
safety and purity (State is passed through the fold), while also 
showing off the higher level parts of Phobos (Use of fold).


Max, this is a great example!
However, as you noticed it's a bit long and in fact in its current 
state it wouldn't look good:


http://imgur.com/a/KwczM

If there's no chance to make it shorter,


import std.stdio, std.string, std.algorithm, std.conv;
void main(){
 readln.split.fold!((stack,op){
 switch(op){
 static foreach(c;"+-*/") case [c]:
 return stack[0..$-2]~mixin("stack[$-2] "~c~" stack[$-1]");
 default: return stack~op.to!real;
 }
 })((real[]).init).writeln;
}



(Sorry for the double post. Internet connection problem.)


Re: [your code here] Pure RPN calculator

2017-07-26 Thread Timon Gehr via Digitalmars-d

On 26.07.2017 04:37, Seb wrote:

On Tuesday, 25 July 2017 at 21:13:54 UTC, Max Haughton wrote:

Semi-Functional/pure RPN calculator: https://run.dlang.io/is/JGkBZx

This is probably too long, but it demonstrates the compiler enforced 
safety and purity (State is passed through the fold), while also 
showing off the higher level parts of Phobos (Use of fold).


Max, this is a great example!
However, as you noticed it's a bit long and in fact in its current state 
it wouldn't look good:


http://imgur.com/a/KwczM

If there's no chance to make it shorter,


import std.stdio, std.string, std.algorithm, std.conv;
void main(){
readln.split.fold!((stack,op){
switch(op){
static foreach(c;"+-*/") case [c]:
return stack[0..$-2]~mixin("stack[$-2] "~c~" stack[$-1]");
default: return stack~op.to!real;
}
})((real[]).init).writeln;
}



Re: [your code here] Pure RPN calculator

2017-07-26 Thread Timon Gehr via Digitalmars-d

On 26.07.2017 04:37, Seb wrote:

On Tuesday, 25 July 2017 at 21:13:54 UTC, Max Haughton wrote:

Semi-Functional/pure RPN calculator: https://run.dlang.io/is/JGkBZx

This is probably too long, but it demonstrates the compiler enforced 
safety and purity (State is passed through the fold), while also 
showing off the higher level parts of Phobos (Use of fold).


Max, this is a great example!
However, as you noticed it's a bit long and in fact in its current state 
it wouldn't look good:


http://imgur.com/a/KwczM

If there's no chance to make it shorter,


import std.stdio,std.string,std.algorithm,std.conv;
void main(){
readln.split.fold!((stack,op){
switch(op){
static foreach(c;"+-*/") case [c]:
return stack[0..$-2]~mixin("stack[$-2] "~c~" stack[$-1]");
default: return stack~op.to!real;
}
})((real[]).init).writeln;
}



Re: [your code here] Pure RPN calculator

2017-07-25 Thread Seb via Digitalmars-d

On Tuesday, 25 July 2017 at 21:13:54 UTC, Max Haughton wrote:
Semi-Functional/pure RPN calculator: 
https://run.dlang.io/is/JGkBZx


This is probably too long, but it demonstrates the compiler 
enforced safety and purity (State is passed through the fold), 
while also showing off the higher level parts of Phobos (Use of 
fold).


Max, this is a great example!
However, as you noticed it's a bit long and in fact in its 
current state it wouldn't look good:


http://imgur.com/a/KwczM

If there's no chance to make it shorter, my suggestion 
considering that there are two other ideas in the queue with a 
similar length problem:


https://github.com/dlang/dlang.org/pull/1759
https://github.com/dlang/dlang.org/pull/1762

would be to find a new home for such "one-page" D example. We 
plan to restructure the DTour (tour.dlang.org) anyways, so how 
about adding a new section like "D in action" to it?


-> I have opened a discussion: 
https://github.com/dlang-tour/english/issues/194


Re: [your code here] Pure RPN calculator

2017-07-25 Thread GrrrrrAngryMan via Digitalmars-d

On Tuesday, 25 July 2017 at 21:13:54 UTC, Max Haughton wrote:
Semi-Functional/pure RPN calculator: 
https://run.dlang.io/is/JGkBZx


This is probably too long, but it demonstrates the compiler 
enforced safety and purity (State is passed through the fold), 
while also showing off the higher level parts of Phobos (Use of 
fold).


Answer to this 
https://forum.dlang.org/post/dhuvztizmqysqsepm...@forum.dlang.org.

This is exactly what the author looked for.


[your code here] Pure RPN calculator

2017-07-25 Thread Max Haughton via Digitalmars-d
Semi-Functional/pure RPN calculator: 
https://run.dlang.io/is/JGkBZx


This is probably too long, but it demonstrates the compiler 
enforced safety and purity (State is passed through the fold), 
while also showing off the higher level parts of Phobos (Use of 
fold).