If I may jump in here:

On Thu, 7 Jul 2005, Yukihiro Matsumoto wrote:

> Hi,
>
> In message "Re: Object#=~"
>    on Wed, 6 Jul 2005 20:10:08 +0900, "daz" <dooby / d10.karoo.co.uk> writes:
         [...]
> |true  - positive pattern match result
> |nil   - negative pattern match result
> |false - don't know (no match was done)
>
> Hmm, sorry for behaving unexpectedly.  But I like your idea.
> Ryan, what do you think?
>
> 							matz.
>

I'd expect nil and false to be swapped in the above scheme. In logic
false is the opposite of true. Nil is untrue, but it is not false.

Suppose, [for a moment of madness :-)], that you woke up one day to
find you'd given us Fuzzy truth values as a native Ruby class. :-)
Nil would still be different from a truth value of 0.5, and would
mean that nothing could be said about the truth value.  So I think
things which are proper truth values should be used for positive and
negative results, and nil for the third case.

This also fits any mental TTL[1] metaphor people might have: true ==
high, false == low, and nil == tristate.

But I wonder how much code would break if this path were taken...
         Hugh

[1] Transistor-Transistor Logic