Re: A left-exclusive Range class

The current Range class in ruby is quite useful, however, I was recently
trying to capture a simple algorithm and ended up needing to express
left-exclusion.

Can you tell me what that algorithm was ? It may be blindness, but
at the moment, I do not understand in what circumstances one might
need such a feature, whereas applications for right-exclusion are
obvious
to me …

Thanks.

Best regards,

Axel

On Wed, 2006-08-02 at 23:24 +0900, [email protected] wrote:

The current Range class in ruby is quite useful, however, I was recently
trying to capture a simple algorithm and ended up needing to express
left-exclusion.

Can you tell me what that algorithm was ? It may be blindness, but
at the moment, I do not understand in what circumstances one might
need such a feature, whereas applications for right-exclusion are obvious
to me …

Sure thing. I’m working on a simulation environment for various
Distribute Hash Table (DHT) algorithms. It is common for such
algorithms to define the key-space a node is responsible for as

(n, n.successor]

While it is often okay to just use [n, n.successor] (which is what I’m
currently doing), it would be nice to feel the implementation followed
from theory.

I don’t mean to make this sound like a critical issue, just a general
query. :slight_smile:

ciao,
Cyrus

Cyrus Hall wrote:

Sure thing. I’m working on a simulation environment for various
query. :slight_smile:
The simplest thing you can always do is to create a method that (and
optionally a special range class if you like) implements this as syntax
modifications are always difficult. If you do

module Kernel
private

def lor®
r.exclude_end? ? r.first.succ … r.last : r.first.succ … r.last
end
end

You can do

irb(main):030:0> for i in lor 1…10 do puts i end
2
3
4
5
6
7
8
9
10
=> 2…10
irb(main):031:0> for i in lor 1…10 do puts i end
2
3
4
5
6
7
8
9
=> 2…10
irb(main):032:0>

Kind regards

robert

On Thu, 2006-08-03 at 01:35 +0900, Robert K. wrote:

end
This isn’t quite right however, as lor(0…10).include?(0.5) would
return false (when it should return true). However, what you suggest is
what I’m doing right now, as every DHT I’ve ever seen uses whole
numbers. Never the less, looking for a better solution…

I’m writing the unit tests for a little replacement class right now.
Once they all pass, I’ll post it for others.

Cyrus

Cyrus Hall wrote:

end
end

This isn’t quite right however, as lor(0…10).include?(0.5) would
return false (when it should return true). However, what you suggest is
what I’m doing right now, as every DHT I’ve ever seen uses whole
numbers. Never the less, looking for a better solution…

Yeah, that was just a quick sample hack to illustrate the idea.

I’m writing the unit tests for a little replacement class right now.
Once they all pass, I’ll post it for others.

As I see you got the hang of it already. :slight_smile:

Cheers

robert

Facets has an Interval class.

T.

On Thu, 2006-08-03 at 02:00 +0900, [email protected] wrote:

Facets has an Interval class.

T.

Thanks transfire. This is exactly what I was looking for. I’ve got my
own up and running now, but the Facets library looks very useful, and a
good place to check for useful classes in the future.

Cyrus

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs