Many of our data definitions and function definitions look alike. For
example, the definition for a list of symbols differs from that of a list
of numbers in only two regards: the name of the class of data and the words
``symbol'' and ``number.'' Similarly, a function that looks for a specific
symbol in a list of symbols is nearly indistinguishable from one that looks
for a specific number in a list of numbers.
Repetitions are the source of many programming mistakes. Therefore good
programmers try to avoid repetitions as much as possible. As we develop a
set functions, especially functions derived from the same template, we soon
learn to spot similarities. It is then time to revise the functions so as
to eliminate the repetitions as much as possible. Put differently, a set of
functions is just like an essay or a memo or a novel or some other piece of
writing. The first draft is just a <#25451#> draft<#25451#>. Unless we edit the essay
several times, it does not express our ideas clearly and concisely. It is a
pain to read for others. Because functions are read by many other people
and because real functions are modified after reading, we must learn ``to
edit'' functions.
The elimination of repetitions is the most important step in the (program)
editing process. In this section, we discuss similarities in function
definitions and in data definitions and how to eliminate
them.