Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3

...

  1. Write the arrangements (permutations) function from HTDP problem 12.4.2 in HW2 as a Java method for a Word class provided in the file Word.dj1. This file includes definitions of the composite pattern classes Word and WordList. Decompose the problem in exactly the same form as this solution to problem 12.4.2. We are providing skeletons for the classes Word and WordList in the file WordList.dj1; use them.
  2. Write the mergesort function from the last problem in HW4 (using exactly the same top-down approach described in HW4) as a Java method in the composite pattern class ComparableList provided in the file ComparableList.dj1.
  3. Do Exercise 21.2.3 from HTDP using the Java composite pattern class ObjectList provided in the file ObjectList.dj1. This file includes the interface Predicate, which is the type of Java function arguments passed to the filter method, and abstract method stubs for filter, eliminateExp, recall, and selection . Exercise 21.2.3 provides Scheme code for the filter function which you should directly translate to the corresponding Java method code in ObjectList. Note that your filter method should work for arbitrary ObjectLists. In coding the methods eliminateExp, recall, and selection, use the Java type Number (compared using method doubleValue in place of the Scheme number type and the Java type Object in place of the Scheme symbol type. The method doubleValue() in Number returns the value of this converted to a double. You will need to cast the Object input of the test method to type Number when filtering lists of numbers.
  4. Do Problem 2 from Homework 5 in Java using the composite hierarchy of classes provided in the file ArithExpr.dj1.

Are You The Last Element In A List?

The A difficulty when processing lists is how to tell if one is at the last element of the list.   This is useful in a number of situations, such as in the merge sorting process above.

...

This code is longer, but safer, more robust and more extensible.

But Wait, There's More!

How could you extend the delegation ideas in the above technique to enable you to differentiate between the follow four scenarios involving two lists?

  1. One list is empty and
    1. the other list is empty or
    2. the other list is non-empty
  2. One list is non-empty and
    1. the other list is empty or
    2. the other list is non-empty