/* 1 -1 product of the defined cells */ #define PROD_PROD d[0] static void rf_prod_callback( Data *d) { d->PROD_PROD *= d->list_val; } double rf_prod(const Node *n, const Cell *c) { Data d; d.PROD_PROD = 1; ss_traverse_list( Right(n), c, rf_prod_callback, &d); return d.PROD_PROD; }