reduce (higher-order function)