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 |
|||
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 ( |
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 ) ) ) ; |
||
⚫ | |||
FOR k := Low ( |
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 ) ) ) ; |
||
⚫ | |||
FOR k := Low ( |
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 := |
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 := |
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 := |
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 := x [ High ( x ) ]; |
|||
⚫ | |||
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, |
|||
Math, |
Math, |
||
SysUtils, |
SysUtils, |
||
Line 2,870: | Line 2,870: | ||
Randomize ; |
Randomize ; |
||
setlength ( a, |
setlength ( a, 4 ) ; |
||
setlength ( b, |
setlength ( b, 4 ) ; |
||
setlength ( c, |
setlength ( c, 4 ) ; |
||
a := Map ( |
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 = ' , |
WriteLn ( 'avg = ' , Accu ) ; |
||
writeln ; |
writeln ; |
||
writeln ; |
writeln ; |
||
c := Filter ( Is_Odd , |
c := Filter ( Is_Odd , b ) ; |
||
writeln ( 'Odd : ' , length ( c ) ) ; |
|||
Map ( show , c ) ; |
Map ( show , c ) ; |
||
⚫ | |||
⚫ | |||
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/ |
</lang>JPD 2021/07/09 |
||
Output: |
Output: |