{ %OPT=-Sc } { %SKIPTARGET=go32v2 } { Test skipped for go32v2, because it forbids the testsuite to complete without manually killing the program } program test2; {$mode objfpc}{$H+} // This demo program abuses FPC's custom operator facility to simulate // Vector Pascal's \+ (reduce-add) operator, which is derived from APL's // +/ function/operator. // // If the dummy record type (TReduce) is empty, there will be a runtime error // when the operator result is assigned. This can be fixed either by // explicitly importing the Variants unit, or by changing the operator // function to return an integer. type t1= array of integer; TReduce= record // x: variant end; var a1: t1; reduce: TReduce = (); procedure print(const a: t1); var i: integer; begin for i := Low(a) to High(a) do Write(a[i], ' '); WriteLn end { print } ; operator + (const r: TReduce; const a: t1): variant; var i: integer; begin result := 0; for i := Low(a) to High(a) do result += a[i] end { + } ; begin // a1 := t1.create(1,2,3,4,5); Requires trunk // a1 := t1([1,2,3,4,5]); Doesn't work without tuple support SetLength(a1, 5); a1[0] := 1; a1[1] := 2; a1[2] := 3; a1[3] := 4; a1[4] := 5; WriteLn('a1:'); print(a1); WriteLn('+/ a1:'); WriteLn(reduce + a1); WriteLn end.