[#9382] the sign of a number is omitted when squaring it. -2**2 vs (-2)**2 — <noreply@...>

Bugs item #6468, was opened at 2006-11-03 17:25

9 messages 2006/11/03

[#9385] merge YARV into Ruby — SASADA Koichi <ko1@...>

Hi,

42 messages 2006/11/04
[#9405] Re: merge YARV into Ruby — "Kirill Shutemov" <k.shutemov@...> 2006/11/06

On 11/4/06, SASADA Koichi <ko1@atdot.net> wrote:

[#9406] Re: merge YARV into Ruby — Sylvain Joyeux <sylvain.joyeux@...4x.org> 2006/11/06

On Monday 06 November 2006 16:01, Kirill Shutemov wrote:

[#9417] Re: merge YARV into Ruby — Sean Russell <ser@...> 2006/11/06

On Monday 06 November 2006 10:15, Sylvain Joyeux wrote:

[#9428] Re: merge YARV into Ruby — "Kirill Shutemov" <k.shutemov@...> 2006/11/06

On 11/6/06, Sean Russell <ser@germane-software.com> wrote:

[#9402] fast mutexes for 1.8? — MenTaLguY <mental@...>

Many people have been using Thread.critical for locking because Ruby

24 messages 2006/11/06

[#9450] Bikeshed: No more Symbol < String? — Kornelius Kalnbach <murphy@...>

Hi ruby-core!

21 messages 2006/11/07
[#9452] Re: Bikeshed: No more Symbol < String? — Yukihiro Matsumoto <matz@...> 2006/11/07

Hi,

[#9493] Future Plans for Ruby 1.8 Series — URABE Shyouhei <shyouhei@...>

This week Japanese rubyists were talking about the future of ruby_1_8

13 messages 2006/11/09

[#9515] External entropy pool for random number generator — "Kirill Shutemov" <k.shutemov@...>

In the attachment patch which allow to use external entropy pool for

13 messages 2006/11/11
[#9522] Re: External entropy pool for random number generator — "Nobuyoshi Nakada" <nobu@...> 2006/11/13

Hi,

[#9554] Ruby 1.[89].\d+ and beyond. — Hugh Sasse <hgs@...>

I've been thinking about how version numbers are restricting what we can do.

30 messages 2006/11/16
[#9561] Re: Ruby 1.[89].\d+ and beyond. — Eric Hodel <drbrain@...7.net> 2006/11/16

[#9563] Re: Ruby 1.[89].\d+ and beyond. — Hugh Sasse <hgs@...> 2006/11/16

On Fri, 17 Nov 2006, Eric Hodel wrote:

[#9564] Re: Ruby 1.[89].\d+ and beyond. — Eric Hodel <drbrain@...7.net> 2006/11/16

On Nov 16, 2006, at 12:02 PM, Hugh Sasse wrote:

[#9571] Re: Ruby 1.[89].\d+ and beyond. — "Robert Dober" <robert.dober@...> 2006/11/19

On 11/16/06, Eric Hodel <drbrain@segment7.net> wrote:

[#9604] #ancestors never includes the singleton class (inconsistent) — <noreply@...>

Bugs item #6820, was opened at 2006-11-22 08:49

12 messages 2006/11/22
[#9618] Re: [ ruby-Bugs-6820 ] #ancestors never includes the singleton class (inconsistent) — Yukihiro Matsumoto <matz@...> 2006/11/25

Hi,

[#9629] Re: [ ruby-Bugs-6820 ] #ancestors never includes the singleton class (inconsistent) — Sylvain Joyeux <sylvain.joyeux@...4x.org> 2006/11/27

> It is supposed to. Singleton classes (or eigenclasses, if you want to

Re: Patch for HalfOrder, help please!

From: "Robert Dober" <robert.dober@...>
Date: 2006-11-26 09:15:58 UTC
List: ruby-core #9620
On 11/26/06, Nobuyoshi Nakada <nobu@ruby-lang.org> wrote:
>
> Hi,




<cut>
> lib/tsort.rb may help you?


No but  I have to appologize for the confusion.

> [2 halforder.patch.tar.bz2 <application/x-bzip2 (base64)>]
>
> It was empty.


Sorry about that, I will try to be less confused this time

--
> Nobu Nakada
>
> I have patched my ruby with a HalfOrder module thaught as an optional
replacement of the  #== paradigm.

<explanation of my motivation>
Halforder relies on the definition of <= to define all other comparision
operators.
Note that if for all a,b in a class  a <=b || b <=a holds we have the normal
order, only that we can implement domains where a <= b || b <=a is not true
for all a,b.
This cannot be done with <=> where a<=>b has to return x from {-1,0,1}.
Performance is not a concern.
</explanation>

As this seemed to be a very easy task for someone who never has looked at
the ruby code before off I went :)
<code>
VALUE rb_mHalfOrder;
static ID less_than;
...
static VALUE
ho_gt(x, y)
    VALUE x, y;
{
    VALUE c;

    if (x == y) return Qfalse;

    // y <= x ?
    c = rb_funcall(y, less_than, 1, x);

    if (NIL_P(c)) return Qfalse;
    if ( c == Qfalse ) return c;

    // x <= y ?
    c = rb_funcall(x, less_than, 1, y);

    if (NIL_P(c)) return Qtrue;
    if ( c == Qfalse ) return Qtrue;

    return Qfalse;
}
</code>

The only problem is that the following definition
<code>
static VALUE
ho_equal(x, y)
    VALUE x, y;
{
    VALUE c;

    if (x == y) return Qtrue;

    // x <= y ?
    c = rb_funcall(x, less_than, 1, y);
    if ( NIL_P(c) ) return Qfalse;
    if ( c == Qfalse ) return c;

    // y <= x ?
    c = rb_funcall(y, less_than, 1, x);
    if ( NIL_P(c) ) return Qfalse;
    if ( c == Qfalse ) return c;
    return Qtrue;
}
...
void
Init_HalfOrder()
{
    rb_mHalfOrder = rb_define_module("HalfOrder");
    rb_define_method(rb_mHalfOrder, "==", ho_equal, 1);
    rb_define_method(rb_mHalfOrder, ">", ho_gt, 1);
    rb_define_method(rb_mHalfOrder, ">=", ho_ge, 1);
    rb_define_method(rb_mHalfOrder, "<", ho_lt, 1);

    less_than = rb_intern("<=");
}
</code>
does not override the #== of the class we are mixed in.


I found no way to do this but I would love to do this.

Thank you
Robert
-- 
The reasonable man adapts himself to the world; the unreasonable one
persists in trying to adapt the world to himself. Therefore all progress
depends on the unreasonable man.

- George Bernard Shaw

In This Thread

Prev Next