[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Re: A left-exclusive Range class

Cyrus Hall

8/2/2006 2:37:00 PM

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 ...

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. :-)

ciao,
Cyrus



5 Answers

Robert Klemme

8/2/2006 4:32:00 PM

0

Cyrus Hall wrote:
> 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 ...
>
> 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. :-)

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


Cyrus Hall

8/2/2006 4:52:00 PM

0

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

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


Trans

8/2/2006 4:59:00 PM

0

Facets has an Interval class.

T.

Robert Klemme

8/3/2006 9:30:00 AM

0

Cyrus Hall wrote:
> 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
>
> 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. :-)

Cheers

robert

Cyrus Hall

8/3/2006 12:31:00 PM

0

On Thu, 2006-08-03 at 02:00 +0900, transfire@gmail.com 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