On this page:
Problem 1: Generics and higher-order functions
6.1 The Convolve higher-order function
6.1.1 Practice with higher order functions
6.1.2 The Convolve operation
6.1.3 A Pair sequence
7.2

Lab 6: Higher-order functions

Goals: The goals of this lab are to practice writing operations using higher-order functions, and implement a new higher-order function.

You may work with your current assignment partner in this lab. Any lab quiz should still be taken individually.

Problem 1: Generics and higher-order functions

Related files:
  IList.java  

6.1 The Convolve higher-order function

We have seen the following higher-order functions:

You can find an implementation of these operations in the attached code.

6.1.1 Practice with higher order functions

Create a list of strings using the provided IList<T> interface and classes. The list should contains the months of the year. Write tests for the following, using higher-order functions:

6.1.2 The Convolve operation

The convolve operation is best understood using lists of numbers. Consider two lists W and L of numbers, of the same length. The convolution of these two lists produces a list that represents their per-element combination in some way. For example, a list of numbers C can be produced where each element in C is the product of the respective elements in W and C. If W=[0.3 0.5 0.1 -0.3] and L=[2.0 4.0 3.0 1.0] then C=[0.6 2.0 0.3 -0.3]. Another convolution can be the concatenation: CO=[0.3,2.0 0.5,4.0 0.1,3.0 -0.3,1.0]. If the lists are not the same length, then the length of the result is equal to the smaller of the two lengths. For example if W=[0.3 0.5 0.1] and L=[2.0 4.0 3.0 1.0] then CO=[0.3,2.0 0.5,4.0 0.1,3.0].

Implement the convolve operation on lists. We recommend that you approach this problem as follows:

6.1.3 A Pair sequence

Use the convolve operation to create a list that creates a list of pairs of the objects in the two lists. For example, a list of months of the year and a list of the number of days in each months can be convolved into a list of (month,days) pairs.