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

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

···

On Wed, 2006-08-02 at 23:24 +0900, Nuralanur@aol.com 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 ...

Cyrus Hall 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:

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)
     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 Wed, 2006-08-02 at 23:24 +0900, Nuralanur@aol.com wrote:

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

···

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

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)
     r.exclude_end? ? r.first.succ ... r.last : r.first.succ .. r.last
   end
end

Facets has an Interval class.

T.

Cyrus Hall wrote:

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)
     r.exclude_end? ? r.first.succ ... r.last : r.first.succ .. r.last
   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

···

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

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

···

On Thu, 2006-08-03 at 02:00 +0900, transfire@gmail.com wrote:

Facets has an Interval class.

T.