Cześć mam zadanie:
Wykorzystaj paradygmat programowania funkcyjnego i dodaj do przykładowego programu dwie operacje: jedną zwracającą iloczyn elementów o wartościach parzystych, a drugą o wartościach nieparzystych. W tym celu zmodyfikuj funkcję evaluate_operation(), tak aby przyjmowała ona dodatkowy parametr identity, który będzie elementem neutralnym wykonywanej operacji i będzie zwracany dla przypadku brzegowego rekursji.
Mam problem z wykonaniem tego zadania a w zasadzie nie wiem czemu mój kod nie działa czy mógłby mnie ktoś nakierować w jakim miejscu popełniam błąd.
int evaluate_operation (int identity, struct sll_node *node,
int (* operation ) (int result, struct sll_node * node ) )
{
if (( NULL != node ) && ( NULL != operation ) )
{
if(operation ( evaluate_operation (identity,node ->next, operation ),node )==0)
{
identity=1;
return operation (identity, node ) ;
}
else{
return operation ( evaluate_operation (identity,node ->next, operation ),node ) ;
}
}
return 0;
}
int multiplication_odd(int result,struct sll_node *node)
{
if(node->data%2!=0)
{
result*=node->data;
return result;
}
else return 0;
}
int main ()
{
struct sll_node * front = NULL ;
insert_node(&front,5);
insert_node(&front,4);
insert_node(&front,3);
insert_node(&front,2);
printf (" List elements printed with higher order function : ") ;
perform_operation (front, print_node ) ;
printf ("\n") ;
printf("Product of odd elements of list: %d",evaluate_operation(1,front,multiplication_odd));
remove_list (& front ) ;
front = NULL ;
return 0;
}