java.lang.Object
provided.listFW.visitors.FoldRAlgo
- All Implemented Interfaces:
IListAlgo
Performs the fold-right (reverse accumulation) algorithm using the given IAccumulator.
The general reverse accumulation algorithm would not take an accumulator as a top-level
input parameter, instead the accumulator would be hidden inside the algorithm.
But since the fold process, makes the folding process invariant and the accumulator the
variant piece, the accumulator is thus necessarily an input parameter here.
- Author:
- swong
-
Constructor Summary
Constructors -
Method Summary
-
Constructor Details
-
FoldRAlgo
public FoldRAlgo()
-
-
Method Details
-
emptyCase
Description copied from interface:IListAlgoOperates onMTList, the empty list. SinceIEmptyListhas 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 perhapshost.execute(..., ...).
-
nonEmptyCase
Description copied from interface:IListAlgoOperates onNEList, a non-empty list. The host list now has a first and a rest. So the code here usually involves whathost.getFirst()andhost.getRest()can do to accomplish the task at hand.host.getFirst()is simply a dataObjectthat 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 anIList! What can anIListdo?executean alogrithmIListAlgowith some input. WhatIListAlgocan that be? The current algorithm that is being executed is as good a candidate as any otherIListAlgo. In Java, we use the key wordthisto 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 callhost.getRest().execute(this, something involving inp).
- Specified by:
nonEmptyCasein interfaceIListAlgo- Parameters:
host- theNEListthat is executing this algorithmacc- a variable number of input parameters that can be used for any purpose.- Returns:
- result from calling this method. The type of the result is problem-specific and may be null.
-