The role of functions in a programming language and in the problem-solving process is considerable and includes: Allowing us to refer to an action using a meaningful name, e.g., sine(x) a very concrete use of abstraction. Providing a mechanism that allows us to break a problem down into parts, giving us the opportunity to structure our problem solution. Providing us with the ability to concentrate on one part of a problem at a time and ignore the others. Allowing us to avoid the replication of the same or very similar sections of code when solving the same or a similar subproblem which has the secondary effect of reducing the memory requirements of the final program. Allowing us to build up a library of functions or modules for solving particular subproblems, both saving considerable development time and increasing our effectiveness and productivity.