Higher-order functions: Difference between revisions

Content added Content deleted
m (→‎{{header|Phix}}: added get_routine_info() comment, Phix/basics libheader, syntax coloured)
Line 2,471: Line 2,471:
INTERFACE
INTERFACE


USES
USES
Math,
Math,
SysUtils,
SysUtils,
variants;
Variants;
{$WARN 6058 off : Call to subroutine "$1" marked as inline is not inlined} // Use for variants
{$WARN 6058 off : Call to subroutine "$1" marked as inline is not inlined} // Use for variants


Line 2,535: Line 2,535:
result := Ar ;
result := Ar ;


FOR k := Low ( x ) TO High ( x ) DO
FOR k := Low ( Ar ) TO High ( Ar ) DO
Ar [ k ] := f ( x [ k ] ) ;
Ar [ k ] := f ( x [ k ] ) ;


Line 2,565: Line 2,565:
BEGIN
BEGIN
SetLength ( Ar, length ( x ) ) ;
SetLength ( Ar, min ( length ( x ) , length ( y ) ) ) ;
result := Ar ;


FOR k := Low ( x ) TO High ( x ) DO
FOR k := Low ( Ar ) TO High ( Ar ) DO
Ar [ k ] := f ( x [ k ] , y [ k ] ) ;
Ar [ k ] := f ( x [ k ] , y [ k ] ) ;


Line 2,586: Line 2,585:
BEGIN
BEGIN
SetLength ( Ar, length ( x ) ) ;
SetLength ( Ar, min ( length ( x ) , length ( y ) ) ) ;
result := Ar ;


FOR k := Low ( x ) TO High ( x ) DO
FOR k := Low ( Ar ) TO High ( Ar ) DO
Ar [ k ] := f ( x [ k ] , y [ k ] ) ;
Ar [ k ] := f ( x [ k ] , y [ k ] ) ;


Line 2,643: Line 2,641:
BEGIN
BEGIN
result := ord ( f ( 0, x [ 0 ] ) = 0 ) ;
result := x [ Low ( x ) ] ;


FOR k := Low ( x ) TO High ( x ) DO
FOR k := Low ( x ) TO High ( x ) DO
Line 2,660: Line 2,658:
BEGIN
BEGIN
result := ord ( f ( 0, x [ 0 ] ) = 0 ) ;
result := x [ Low ( x ) ] ;


FOR k := Low ( x ) TO High ( x ) DO
FOR k := Low ( x ) TO High ( x ) DO
Line 2,686: Line 2,684:
BEGIN
BEGIN

result := ord ( f ( 0, x [ 0 ] ) = 0 ) ;
result := x [ High ( x ) ] ;
FOR k := High ( x ) DOWNTO Low ( x ) DO
FOR k := High ( x ) DOWNTO Low ( x ) DO
Line 2,704: Line 2,702:
BEGIN
BEGIN
result := ord ( f ( 0, x [ 0 ] ) = 0 ) ;


FOR k := High ( x ) DOWNTO Low ( x ) DO
result := x [ High ( x ) ];

FOR k := High ( x ) DOWNTO Low ( x ) DO
result := f ( result , x [ k ] ) ;
result := f ( result , x [ k ] ) ;


Line 2,847: Line 2,846:
END ;
END ;
END.
END.



(*) === How to use in a program === (*)
(*) === How to use in a program === (*)
Line 2,854: Line 2,854:
{$mode Delphi} {$H+} {$J-} {$R+} (*) https://www.freepascal.org/docs-html/prog/progch1.html (*)
{$mode Delphi} {$H+} {$J-} {$R+} (*) https://www.freepascal.org/docs-html/prog/progch1.html (*)
USES
USES
MRF,
MRF,
Math,
Math,
SysUtils,
SysUtils,
Line 2,870: Line 2,870:
Randomize ;
Randomize ;


setlength ( a, 7 ) ;
setlength ( a, 4 ) ;
setlength ( b, 7 ) ;
setlength ( b, 4 ) ;
setlength ( c, 7 ) ;
setlength ( c, 4 ) ;
a := Map ( RandFillInt , a ) ;
a := Map ( RandFillReal , a ) ;
Map ( show , a ) ;
Map ( show , a ) ;
writeln ;
writeln ;
Line 2,889: Line 2,889:


b := Map ( RandFillInt , b ) ;
b := Map ( RandFillInt , b ) ;
WriteLn ( 'b :');
Map ( show , b ) ;
Map ( show , b ) ;
writeln ;
writeln ;
Line 2,894: Line 2,895:
Accu := avg ( a ) ;
Accu := avg ( a ) ;
WriteLn ( 'avg = ' ,Accu );
WriteLn ( 'avg = ' , Accu ) ;
writeln ;
writeln ;
writeln ;
writeln ;
c := Filter ( Is_Odd , a ) ;
c := Filter ( Is_Odd , b ) ;
writeln ( 'Odd : ' , length ( c ) ) ;
Map ( show , c ) ;
Map ( show , c ) ;
writeln ;
writeln ;

Accu := FoldL ( min , c ) ;
WriteLn ( 'min = ' , Accu );
writeln ;
writeln ;

Accu := FoldL ( max , c ) ;
WriteLn ( 'max = ' , Accu );
writeln ;
writeln ;
writeln ;
writeln ;
Line 2,927: Line 2,939:





</lang>JPD 2021/07/08
</lang>JPD 2021/07/09


Output:
Output: