At 11:57 PM -0500 12/16/05, Rob Kinyon wrote:
How many different undefs are there?

That depends on what exactly you are asking.

1. An undef is what you have when a container contains no explicit value (or junction/etc thereof).

A variable whose value is undefined is still a typed container; eg:

 my Int $z; # undef since not assigned to
 my Str $y; # undef since not assigned to
 my Any $x; # undef since not assigned to
 my Foo $w; # undef since not assigned to

Each of those is a different container type, so in that respect each is different from the others, but none of them has a value (they are empty containers), so it doesn't make sense to try to use the value.

The container type specifies the domain of all possible values that could potentially be put in the container, but none of them are in it currently.

2. Until a value is put in a container, the container has the POTENTIAL to store any value from its domain, so with respect to that container, there are as many undefs as there are values in its domain; with some container types, this is an infinite number.

Only a container that can have exactly one possible value can be equated with; but then you have a constant.

In a manner of speaking, an undef is like a quantum superposition, in that it has no specified value, but rather all possible domain values at once, so you can not absolutely say it is equal to anything.

For all practical purposes, an undef is unuseable random garbage; its only use is that you know it is currently undefined, and the container holding it can later be given a defined value.

Taking this example (details may be incorrect):

 my Int $x; # like -Inf..+Inf or something
 my Int $y; # like -Inf..+Inf or something
 $x == $y; # like random_one($x) == random_one($y)
 $x == 3; # like random_one($x) == 3

The odds of two undefined values in such primitive data types being equal is 1/Inf, which is zero.

So no 2 undefs are equal, and no undef is equal to a defined value.

You can't say what an undef equals because you don't know what value it has.

-- Darren Duncan

Reply via email to