There was already a discussion some time ago whether we should allow operators like "or=" and such as well and the result was simple: no. I consider this the same here.

But it would be more consistent with +=

You can achieve a similar effect through type helpers in 2.7.1 though:
looks cool, but I only have 2.6.2...



type
  TLongIntHelper = type helper for LongInt
    procedure Min(aValue: LongInt);
  end;

procedure TLongIntHelper.Min(aValue: LongInt);
begin
  Self := Math.Min(Self, aValue);
end;

Perhaps that should be defined in the rtl


On 03/28/2013 05:47 PM, Sven Barth wrote:
Am 28.03.2013 16:23, schrieb Benito van der Zander:
Hi,
quite often you need to change a value relatively to another value.
For example:

  array1[array2[i]] := array1[array2[i]] + 42;

Luckily this can be written as

  array1[array2[i]] += 42;

Which is nice.

However, sometimes you do not need addition, but the minimum.
For example:

   array1[array2[i]] := min(array1[array2[i]], 42);

Now, you need to repeat all the array indices.

Which is very ugly.

So there should be an alternative syntax, similar to += :
I.e.:

   array1[array2[i]] min= 42;


More generally, if func is a 2-ary function, of type type(a) => type(b) => type(a), the syntax

a func= b

should become a := func(a, b)

(Or alternatively the syntax   a : func = b;  might be easier to parse)

There was already a discussion some time ago whether we should allow operators like "or=" and such as well and the result was simple: no. I consider this the same here.

You can achieve a similar effect through type helpers in 2.7.1 though:

=== code begin ===

program mintest;

{$mode objfpc}

uses
  Math;

type
  TLongIntHelper = type helper for LongInt
    procedure Min(aValue: LongInt);
  end;

procedure TLongIntHelper.Min(aValue: LongInt);
begin
  Self := Math.Min(Self, aValue);
end;

var
  arr: array[0..20] of LongInt;
  i: LongInt;
begin
  for i := Low(arr) to High(arr) do
    arr[i] := i;

  for i := Low(arr) to High(arr) do
    Write(arr[i], ' ');
  Writeln;

  arr[15].Min(10); // arr[15] is passed as Self to Min

  for i := Low(arr) to High(arr) do
    Write(arr[i], ' ');
  Writeln;
end.

=== code end ===

Regards,
Sven
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to