Higher-order functions: Difference between revisions

Line 2,449:
end.</lang>
 
=== using FreePascal : Higher-order function MAP / FILTER ===
{{works with|FreePascal|version 3.2.0 }}
<lang Pascal>
PROGRAM HigherOrderMap;
Line 2,485:
Varyray = array of variant ;
 
 
 
PROCEDURE Show ( x: variant ) ;
BEGIN write( x, ' ' ) ; END ;
 
 
 
FUNCTION map ( f: FunA ; x: Varyray ) : Varyray ; overload ;
Line 2,553 ⟶ 2,558:
END;
 
PROCEDURE Show ( x: variant ) ;
BEGIN write( x, ' ' ) ; END ;
 
 
FUNCTION Filter ( f: FunA ; x: Varyray ) : Varyray ; overload ;
VAR
 
FUNCTION RandFillInt ( x: variant )Ar : array of variant ;
map__ ( show: variant , d ) ;
d := map ( max k : integer , a, b ) ;
BEGIN result len := ( x modinteger 2 ) * x ; END ;
BEGIN
SetLength ( Ar, 0 ) ;
result := Ar ;
 
BEGIN result FOR k := abs (Low ( x mod 2 ) -TO 1High ) *( x ;) END ;DO
BEGIN
__ := f ( x [ k ] ) ;
IF __ <> False THEN
 
BEGIN
len := Length ( Ar ) ;
SetLength ( Ar, len + 1 ) ;
Ar [ len ] := __ ;
END ;
 
END ;
result := Ar ;
 
END;
 
 
(*) TEST Functions (*)
 
 
FUNCTION RandFillInt ( x: variant ) : variant ;
BEGIN result := Random ( 100 ) ; END ;
 
Line 2,578 ⟶ 2,613:
 
FUNCTION Even ( x: variant ) : variant ;
 
BEGIN result := abs ( ( x mod 2 ) - 1 ) * x ; END ;
BEGIN
 
IF ( ( x mod 2 ) = 0 ) THEN
result := x
ELSE
Result := False
 
END;
 
 
 
FUNCTION Odd ( x: variant ) : variant ;
 
BEGIN result := ( x mod 2 ) * x ; END ;
BEGIN
 
IF ( ( x mod 2 ) <> 0 ) THEN
result := x
ELSE
Result := False
 
END;
 
 
 
(*)
Line 2,617 ⟶ 2,670:
setlength ( d, 7 ) ;
a := map ( RandFillInt , a ) ;
map ( show , a ) ;
writeln ;
writeln ;
 
b := map ( RandFillFloatRandFillInt , b ) ;
map ( show , b ) ;
writeln ;
writeln ;
 
d := mapFilter ( even , a ) ;
map ( show , d ) ;
writeln ;
writeln ;
cd := mapFilter ( cosinusodd , ba ) ;
map ( show , cd ) ;
writeln ;
 
d := map ( max , a, b ) ;
map ( show , d ) ;
writeln ;
 
d := map ( incrmax , a, b ) ;
map ( show , d ) ;
writeln ;
writeln ;
 
 
 
setlength ( d, 0 ) ;
Line 2,650 ⟶ 2,705:
END.
 
</lang>JPD 2021/07/0708
 
</lang>JPD 2021/07/07
 
Output:
122

edits