Nil question

Lähettäjä: "William James" <w_a_x_man@yahoo.com>
Aihe: Re: nil question

Austin Ziegler wrote
> you can also do:
>
> puts "yes" if x.between?(-5, 9)
> puts "yes" if (-5..9).include?(x)

But that's not as readable as -5 < x < 9, which is how it is written
for humans in algebra.

In Icon, comparisons succeed or fail, they don't return true or false.
So it works this way (if x==0):
(-5 < 0 ) succeeds and produces 0
(0 < 9 ) succeeds and produces 9

1 < x < 9
(1 < 0) fails

-5 < x < -15
(-5 < 0 ) succeeds and produces 0
(0 < -15 ) fails

So in Icon, a < x < b means exactly what it does in algebra.

Matz and many Ruby gurus think that Ruby incorporates the best
features of preceding languages (e.g., Awk, Perl, Python, Smalltalk).
But how many of these people ever used Icon?

Put this in a file and require it and you'll get the behaviour you
want. Normal comparisons still work, too.

# Create the new comparison methods
module MultiComparable
  def <(val)
    return val if self.<=>(val) == -1
    false
  end
  def >(val)
    return val if self.<=>(val) == 1
    false
  end
end

# Modify false to allow comparisons (always fail)
class FalseClass
  def <(val)
    false
  end
  def >(val)
    false
  end
end

# Redefine all numeric comparisons
class Fixnum; remove_method :<; remove_method :>; include MultiComparable; end
class Bignum; remove_method :<; remove_method :>; include MultiComparable; end
class Float; remove_method :<; remove_method :>; include MultiComparable; end
class Complex; remove_method :<; remove_method :>; include MultiComparable; end

I actually tested it now :slight_smile:

E