digitalmars.D.learn - std.algorithm.among
- bearophile (10/10) Jul 13 2014 The idea of not making std.algorithm.among!() a predicate was not
- sigod (7/17) Jul 13 2014 ```
- Timon Gehr (3/13) Jul 13 2014 It works with filter, so I think it should just work with until as well.
- bearophile (6/8) Jul 13 2014 So do you suggest me to open a bug report where I ask "among" to
- Timon Gehr (10/16) Jul 13 2014 I am saying the following code implementing 'until' in std.algorithm is
- bearophile (4/14) Jul 13 2014 https://issues.dlang.org/show_bug.cgi?id=13124
- Meta (3/13) Jul 13 2014 That's weird, I always assumed this worked. Was it always the
- Timon Gehr (2/4) Jul 13 2014 Yes, unless their range fits into [0,2).
- Meta (8/14) Jul 13 2014 It seems that not even that is the case.
- bearophile (12/19) Jul 13 2014 D doesn't carry the range of mutable variables across different
- "Ola Fosheim =?UTF-8?B?R3LDuHN0YWQi?= (2/4) Jul 13 2014 What is the reasoning behind this kind of special-casing?
- bearophile (5/9) Jul 14 2014 Compiler simplicity and to avoid flow analysis. The value range
The idea of not making std.algorithm.among!() a predicate was not so good: void main() { import std.stdio, std.algorithm; auto s = "hello how\nare you"; s.until!(c => c.among!('\n', '\r')).writeln; } (A normal workaround is to use !!c.among!). Bye, bearophile
Jul 13 2014
On Sunday, 13 July 2014 at 11:18:05 UTC, bearophile wrote:The idea of not making std.algorithm.among!() a predicate was not so good: void main() { import std.stdio, std.algorithm; auto s = "hello how\nare you"; s.until!(c => c.among!('\n', '\r')).writeln; } (A normal workaround is to use !!c.among!). Bye, bearophile``` s.until!(among!('\n', '\r')).writeln; // Error: cannot implicitly convert expression (among(front(this._input))) of type uint to bool ``` :-(
Jul 13 2014
On 07/13/2014 01:18 PM, bearophile wrote:The idea of not making std.algorithm.among!() a predicate was not so good: ...Agreed.void main() { import std.stdio, std.algorithm; auto s = "hello how\nare you"; s.until!(c => c.among!('\n', '\r')).writeln; } (A normal workaround is to use !!c.among!). Bye, bearophileIt works with filter, so I think it should just work with until as well.
Jul 13 2014
Timon Gehr:It works with filter, so I think it should just work with until as well.So do you suggest me to open a bug report where I ask "among" to return a bool, or do you suggest to ask for an enhancement of "until", or what? Bye, bearophile
Jul 13 2014
On 07/13/2014 03:09 PM, bearophile wrote:Timon Gehr:I am saying the following code implementing 'until' in std.algorithm is at fault: private bool predSatisfied() // <-- don't say bool here { static if (is(Sentinel == void)) return unaryFun!pred(_input.front); // or cast here else return startsWith!pred(_input, _sentinel); // and here }It works with filter, so I think it should just work with until as well.So do you suggest me to open a bug report where I ask "among" to return a bool, or do you suggest to ask for an enhancement of "until", or what? Bye, bearophile
Jul 13 2014
Timon Gehr:I am saying the following code implementing 'until' in std.algorithm is at fault: private bool predSatisfied() // <-- don't say bool here { static if (is(Sentinel == void)) return unaryFun!pred(_input.front); // or cast here else return startsWith!pred(_input, _sentinel); // and here }https://issues.dlang.org/show_bug.cgi?id=13124 Bye, bearophile
Jul 13 2014
On Sunday, 13 July 2014 at 11:18:05 UTC, bearophile wrote:The idea of not making std.algorithm.among!() a predicate was not so good: void main() { import std.stdio, std.algorithm; auto s = "hello how\nare you"; s.until!(c => c.among!('\n', '\r')).writeln; } (A normal workaround is to use !!c.among!). Bye, bearophileThat's weird, I always assumed this worked. Was it always the case that numeric types can't be implicitly casted to bool?
Jul 13 2014
On 07/13/2014 08:51 PM, Meta wrote:That's weird, I always assumed this worked. Was it always the case that numeric types can't be implicitly casted to bool?Yes, unless their range fits into [0,2).
Jul 13 2014
On Sunday, 13 July 2014 at 19:06:29 UTC, Timon Gehr wrote:On 07/13/2014 08:51 PM, Meta wrote:It seems that not even that is the case. void main() { uint n = 0; //Error bool b = n; }That's weird, I always assumed this worked. Was it always the case that numeric types can't be implicitly casted to bool?Yes, unless their range fits into [0,2).
Jul 13 2014
Meta:It seems that not even that is the case. void main() { uint n = 0; //Error bool b = n; }D doesn't carry the range of mutable variables across different expressions. So write (with the 2.066beta3): void main() { const uint x1 = 0; const uint x2 = 1; bool b1 = x1; bool b2 = x2; } Bye, bearophile
Jul 13 2014
On Sunday, 13 July 2014 at 20:55:25 UTC, bearophile wrote:D doesn't carry the range of mutable variables across different expressions.What is the reasoning behind this kind of special-casing?
Jul 13 2014
Ola Fosheim Grøstad:On Sunday, 13 July 2014 at 20:55:25 UTC, bearophile wrote:Compiler simplicity and to avoid flow analysis. The value range is kept across const expressions since 2.066. Bye, bearophileD doesn't carry the range of mutable variables across different expressions.What is the reasoning behind this kind of special-casing?
Jul 14 2014