Higher-order functions
You are encouraged to solve this task according to the task description, using any language you may know.
Pass a function as an argument.
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.
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)); }
C++
Same as C.