Higher-order functions: Difference between revisions
→using FreePascal : Higher-order function MAP
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
BEGIN
SetLength ( Ar, 0 ) ;
result := Ar ;
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 (
map ( show , b ) ;
writeln ;
writeln ;
d :=
map ( show , d ) ;
writeln ;
writeln ;
map ( show ,
writeln ;
▲ d := map ( max , a, b ) ;
▲ map ( show , d ) ;
writeln ;
d := map (
map ( show , d ) ;
writeln ;
writeln ;
setlength ( d, 0 ) ;
Line 2,650 ⟶ 2,705:
END.
▲</lang>JPD 2021/07/07
Output:
|