public interface IListAlgo
In non OO programming paradigms, an algorithm on lists is expressed as a function or procedure that takes in a list as parameter. In our OO formulation, an alogrithm on lists is an interface that has two methods, each takes in a list as a parameter:
One need not (and should not) check for the type of a list before applying an algorithm to it. THERE IS NO if!
Modifier and Type | Method and Description |
---|---|
java.lang.Object |
emptyCase(MTList host,
java.lang.Object... inp)
Operates on
MTList , the empty list. |
java.lang.Object |
nonEmptyCase(NEList host,
java.lang.Object... inp)
Operates on
NEList , a non-empty list. |
java.lang.Object emptyCase(MTList host, java.lang.Object... inp)
MTList
, the empty list. Since
IEmptyList
has only one method, execute()
,
there is not much the host list can do here. So the code for the empty
case usually involves:inp
, and perhaps
host.execute(..., ...)
.host
- the MTList
that is executing this algorithm.inp
- a variable number of input parameters that can be used for any purpose.java.lang.Object nonEmptyCase(NEList host, java.lang.Object... inp)
NEList
, a non-empty list. The host list now has
a first and a rest. So the code here usually involves what
host.getFirst()
and host.getRest()
can do to
accomplish the task at hand.host.getFirst()
is simply a data Object
that the host list holds. It is problem-specific, and thus what it can
do depends on the problem the current algorithm is trying to solve.
host.getRest()
in contrast is an IList
!
What can an IList
do? execute
an alogrithm
IListAlgo
with some input. What IListAlgo
can
that be? The current algorithm that is being executed is as good a
candidate as any other IListAlgo
. In Java, we use the key
word this
to reference the current receiver of the
method call. Having the rest of host (recursively) execute the current
algorithm is expressed in Java as:
host.getRest().execute(this, ...)
.To summarize, the code for the non-empty case usually involves:
host.getFirst()
, and the recursive call
host.getRest().execute(this, something involving inp)
.host
- the NEList
that is executing this algorithminp
- a variable number of input parameters that can be used for any purpose.