In this section, we will demonstrate how the template method pattern can be implemented using imperative programming techniques, and we will refactor the code to write an FP one. As a concrete example, we plan to use the computation of Internal rate of return (IRR) as a running example.
To focus on the essentials, let us quickly hack an engine to compute the IRR, given a series of payments (List<double>
), the rate, and the period. As a first step, we need to compute the present value of a series of payments by using the technique of discounting. The following routine computes the present value of the series of payments:
public static double CashFlowPVDiscreteAnnual( List<double> arr, double rate, double period) { int len = arr.Count; double PV = 0.0; for (int i = 0; i < len; ++i) PV += arr[i] / Math.Pow((1+rate/100), i); return PV; ...