Jump to content

Higher-order functions: Difference between revisions

Line 2,452:
{{works with|FreePascal|version 3.2.0 }}
<lang Pascal>
UNIT MRF;
PROGRAM HigherOrderMapReduce;
 
{$mode Delphi} {$H+} {$J-} {$R+} (*) https://www.freepascal.org/docs-html/prog/progch1.html (*)
 
Line 2,469 ⟶ 2,468:
(*)
 
USES
 
INTERFACE
 
USES
Math,
SysUtils,
Line 2,485 ⟶ 2,486:
FunD = FUNCTION ( x,y : longint ) : longint ;
 
PROCEDURE Show ( x: variant ) ;
FUNCTION Map ( f: FunA ; x: Varyray ) : Varyray ; overload ;
PROCEDURE Map ( f: FunB ; x: Varyray ) ; overload ;
FUNCTION Map ( f: FunC ; x, y: Varyray ) : Varyray ; overload ;
FUNCTION Map ( f: FunD ; x, y: Varyray ) : Varyray ; overload ;
FUNCTION Filter ( f: FunA ; x: Varyray ) : Varyray ;
FUNCTION FoldL ( f: FunC ; x: Varyray ) : variant ; overload ;
FUNCTION FoldL ( f: FunD ; x: Varyray ) : variant ; overload ;
FUNCTION Reduce ( f: FunC ; x: Varyray ) : variant ; overload ;
FUNCTION Reduce ( f: FunD ; x: Varyray ) : variant ; overload ;
FUNCTION FoldR ( f: FunC ; x: Varyray ) : variant ; overload ;
FUNCTION FoldR ( f: FunD ; x: Varyray ) : variant ; overload ;
FUNCTION Add ( x, y: variant ) : variant ;
FUNCTION Add1 ( x: variant ) : variant ;
FUNCTION AND_xy ( x, y: variant ) : variant ;
FUNCTION AVG ( x: Varyray ) : variant ;
FUNCTION cosine ( x: variant ) : variant ;
FUNCTION Is_Even ( x: variant ) : variant ;
FUNCTION Mult ( x, y: variant ) : variant ;
FUNCTION Is_Odd ( x: variant ) : variant ;
FUNCTION OR_xy ( x, y: variant ) : variant ;
FUNCTION RandFillInt ( x: variant ) : variant ;
FUNCTION RandFillReal ( x: variant ) : variant ;
FUNCTION sine ( x: variant ) : variant ;
FUNCTION ForAll ( f: FunA ; x: Varyray ) : variant ;
FUNCTION AnyOf ( f: FunA ; x: Varyray ) : variant ;
 
 
IMPLEMENTATION
 
 
PROCEDURE Show ( x: variant ) ;
BEGIN write( x, ' ' ) ; END ;
 
 
Line 2,815 ⟶ 2,846:
END ;
 
 
 
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.
 
 
 
122

edits

Cookies help us deliver our services. By using our services, you agree to our use of cookies.