Higher-order functions: Difference between revisions

Content added Content deleted
Line 2,846: Line 2,846:
END ;
END ;
END.

(*) === How to use in a program === (*)


program testMRF.pas;
{$mode Delphi} {$H+} {$J-} {$R+} (*) https://www.freepascal.org/docs-html/prog/progch1.html (*)
USES
MRF,
Math,
SysUtils;
{$WARN 6058 off : Call to subroutine "$1" marked as inline is not inlined} // Use for variants

VAR

a,b,c : array of variant ;

Accu : variant ;

BEGIN
Randomize ;

setlength ( a, 7 ) ;
setlength ( b, 7 ) ;
setlength ( c, 7 ) ;
a := Map ( RandFillInt , a ) ;
Map ( show , a ) ;
writeln ;
writeln ;

Accu := FoldR ( add , a ) ;
WriteLn ( 'Sum = ' , Accu ) ;
writeln ;
writeln ;
Accu := Reduce ( mult , a ) ;
WriteLn ( 'Product = ' , Accu ) ;
writeln ;
writeln ;

b := Map ( RandFillInt , b ) ;
Map ( show , b ) ;
writeln ;
writeln ;
Accu := avg ( a ) ;
WriteLn ( 'avg = ' ,Accu );
writeln ;
writeln ;
c := Filter ( Is_Odd , a ) ;
Map ( show , c ) ;
writeln ;
writeln ;

Map ( show , b ) ;
Accu := ForAll ( Is_Odd , b ) ;
writeln ;
writeln ;
WriteLn ( 'ForAll Is_Odd = ' , Accu ) ;
writeln ;
writeln ;

Map ( show , b ) ;
Accu := AnyOf ( Is_Even , b ) ;
writeln ;
writeln ;
WriteLn ( 'AnyOf Is_Even = ' , Accu ) ;
writeln ;
writeln ;

setlength ( c, 0 ) ;
setlength ( b, 0 ) ;
setlength ( a, 0 ) ;

END.
END.