Higher-order functions: Difference between revisions
No edit summary |
slight change to task description |
||
Line 1:
{{task}}
Pass a function as an argument to another function.
==[[C]]==
|
Revision as of 09:21, 25 January 2007
You are encouraged to solve this task according to the task description, using any language you may know.
Pass a function as an argument to another function.
C
Simple example, the pointer to the function to be passed as an argument is the only involved pointer.
Definition of a function whose only parameter is a pointer to a function with no parameters and no return value:
void myFuncSimple( void (*funcParameter)(void) ) { /* ... */ *funcParameter(); /* Call the passed function. */ /* ... */ }
Call:
void funcToBePassed(void); /* ... */ myFuncSimple(&funcToBePassed);
Complex example.
Definition of a function whose return value is a pointer to int and whose only parameter is a pointer to a function, whose (in turn) return value is a pointer to double and whose only parameter is a pointer to long.
int* myFuncComplex( double* (*funcParameter)(long* parameter) ) { long* inLong; double* outDouble; /* ... */ outDouble = *funcParameter(inLong); /* Call the passed function and store returned pointer. */ /* ... */ }
Call:
double* funcToBePassed(long* parameter); /* ... */ int* outInt; outInt = myFuncComplex(&funcToBePassed);
Finally, declaration of a pointer variable of the proper type to hold such a function as myFunc:
int* (*funcPointer)( double* (*funcParameter)(long* parameter) ); /* ... */ funcPointer = myFuncComplex;
Of course, in a real project you shouldn't write such a convoluted code, but use some typedef instead, in order to break complexity into steps.
C++
Same as C.
Perl
Interpreter: Perl
Passing a pointer to a function
my $retval = first('data', \&second); sub first ($ $){ my $val = shift; my $func = shift; return $func->($val); } sub second ($){ return(reverse(shift)); }
Passing a string to be used as a function
my $retval = first('data', 'second'); sub first ($ $){ my $val = shift; my $func = shift; return &{$func}($val); } sub second ($){ return(reverse(shift)); }
PHP
In this simple example, an array of two values is passed and the statistical average is computed.
function average($arry) { $tmp = ($arry[0] + $arry[1]) / 2; return $tmp; }
To call it:
$array1 = ( 5, 15 ); echo "The average is ".average($arrayl)."\n";
Python
Interpreter: Python 2.5
def first(function): return function() def second(): return "second" result = first(second)