Re: Arrays: Default Values

2003-01-29 Thread Juergen Boemmels
Michael Lazzaro [EMAIL PROTECTED] writes:

 Solution 1:  If you attempt to SET a cell to it's 'empty value', it
 will be set to it's default:
 
 
  my int @a is default(5);  #
  @a[5] = 0;# actually sets it to it's 'empty
 value', 5
 
  @a[5] = undef;# autocnv to 0, + warning, still sets to 5
 
  my Int @a is default(5);  # NOTE difference in type!
  @a[5] = 0;# THIS really does set it to 0
  @a[5] = undef;# and this sets it to 5
 
 So you can't set something to its type's own empty value, because it
 will, by definition, thereafter return it's overloaded empty value,
 def.

AAARGH, *runs for shelter*
Setting an element to a leagal value, results in a different value to
be stored, making it impossible to store this value. And this is even
the most prominent value of the underlying type.

 Solution 2:  _ANY_ other solution would require the introduction of
 'fake empty' and 'really empty', and require arrays to keep track of
 the difference.
 
 
  my Int @a is default(5);
 
  @a[3] = 3;  # there are now 4 items in the array
  @a[2];  # was autoset to undef, so returns 5
  @a[4];  # doesn't exist, so returns 5
 
  @a[2] = undef;  # well, it's still undef, but now mark it
  # as a 'real' undef, so don't return 5.
 
 This is essentially adding another layer of defined-ness on each cell,
 and therefore requires an additional flag be kept  checked for each
 array element.  While this is certainly a possibility, I worry about
 the complexity it introduces.

Solution 3: The autoset sets the value to the default value.

 my Int @a is default(5);

 @a[3] = 3;  # there are now 4 items in the array
 @a[2];  # was autoset 5 so returns 5
 @a[4];  # doesn't exist, so returns 5

 @a[2] = undef;  # set to undef, so returns undef

 @a[5] = @a.default # if you really want to reset something to
# default. BTW there are now 6 items in
# the array. returns 5
 @a[4]; # is now autoset to 5 so it remains 5

The default default value is the empty value of the base type.

 my Int @a;

is the same as 

 my Int @a is default(undef);

bye
b.
-- 
Juergen Boemmels[EMAIL PROTECTED]
Fachbereich Physik  Tel: ++49-(0)631-205-2817
Universitaet Kaiserslautern Fax: ++49-(0)631-205-3906
PGP Key fingerprint = 9F 56 54 3D 45 C1 32 6F  23 F6 C7 2F 85 93 DD 47



Re: Arrays: Default Values

2003-01-29 Thread Juergen Boemmels
Jonathan Scott Duff [EMAIL PROTECTED] writes:

 On Wed, Jan 29, 2003 at 08:49:42PM +0100, Juergen Boemmels wrote:
  Solution 3: The autoset sets the value to the default value.
  
   my Int @a is default(5);
  
   @a[3] = 3;  # there are now 4 items in the array
   @a[2];  # was autoset 5 so returns 5
   @a[4];  # doesn't exist, so returns 5
  
   @a[2] = undef;  # set to undef, so returns undef
 
 Can someone give me a realish world example of when you would want an
 array that can store both undefined values and default values and those
 values are different?

Ok, here is one

my float @weight_factor is default (1.0);

$weighted_sum = sum (@weight_factor »*« @a);

$weight_factor[4711] = 0.0;

bye
b.
-- 
Juergen Boemmels[EMAIL PROTECTED]
Fachbereich Physik  Tel: ++49-(0)631-205-2817
Universitaet Kaiserslautern Fax: ++49-(0)631-205-3906
PGP Key fingerprint = 9F 56 54 3D 45 C1 32 6F  23 F6 C7 2F 85 93 DD 47