www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - std.range.equal or == in isPalindrome

reply "Per =?UTF-8?B?Tm9yZGzDtnci?= <per.nordlow gmail.com> writes:
I'm curious to why we need std.range.equal in cases such as

bool isPalindrome(Range)(in Range range) if 
(isBidirectionalRange!Range)
{
     return range.retro.equal(range);
}

Why isn't equality == operator used here instead?

/Per
Feb 18 2014
next sibling parent reply "bearophile" <bearophileHUGS lycos.com> writes:
Per Nordlöw:

 Why isn't equality == operator used here instead?
In some cases I'd even like to use ~ instead of chain(). Bye, bearophile
Feb 18 2014
parent reply "Stanislav Blinov" <stanislav.blinov gmail.com> writes:
On Tuesday, 18 February 2014 at 09:34:41 UTC, bearophile wrote:

 In some cases I'd even like to use ~ instead of chain().
Range interface should be minimal. Don't forget that user types can provide range interface and still benefit from operator overloading for different purposes.
Feb 18 2014
parent reply "bearophile" <bearophileHUGS lycos.com> writes:
Stanislav Blinov:

 Range interface should be minimal.
I agree. But I didn't mean to ask for that operator in the Range protocol. I think some ranges should define a ~ operator. It's easy to write a "chainable" trait. I did that for my nonstandard D1 library. Bye, bearophile
Feb 18 2014
parent reply "Per =?UTF-8?B?Tm9yZGzDtnci?= <per.nordlow gmail.com> writes:
On Tuesday, 18 February 2014 at 10:47:33 UTC, bearophile wrote:
 Stanislav Blinov:

 Range interface should be minimal.
I agree. But I didn't mean to ask for that operator in the Range protocol. I think some ranges should define a ~ operator. It's easy to write a "chainable" trait. I did that for my nonstandard D1 library. Bye, bearophile
Could you post the isChainable trait? I'm curious :) /Per
Feb 18 2014
parent "Per =?UTF-8?B?Tm9yZGzDtnci?= <per.nordlow gmail.com> writes:
On Tuesday, 18 February 2014 at 11:39:12 UTC, Per Nordlöw wrote:
 On Tuesday, 18 February 2014 at 10:47:33 UTC, bearophile wrote:
 Stanislav Blinov:

 Range interface should be minimal.
I agree. But I didn't mean to ask for that operator in the Range protocol. I think some ranges should define a ~ operator. It's easy to write a "chainable" trait. I did that for my nonstandard D1 library. Bye, bearophile
Could you post the isChainable trait? I'm curious :) /Per
Ahh, I guess you mean http://forum.dlang.org/thread/bug-6043-3 http.d.puremagic.com%2Fissues%2F /Per
Feb 18 2014
prev sibling parent "Stanislav Blinov" <stanislav.blinov gmail.com> writes:
On Tuesday, 18 February 2014 at 09:31:55 UTC, Per Nordlöw wrote:
 I'm curious to why we need std.range.equal in cases such as

 bool isPalindrome(Range)(in Range range) if 
 (isBidirectionalRange!Range)
 {
     return range.retro.equal(range);
 }

 Why isn't equality == operator used here instead?

 /Per
1) opEquals cannot be a free function 2) there's no telling what opEquals does if Range defines it IOW, equal() has a defined by-element-comparison semantics, while opEquals doesn't.
Feb 18 2014