An approach to the development of intelligent systems through integrating function-based reasoning with the generic tasks methodology