Difference between revisions of "ImmutableList Assignment"

From CSE425S Wiki
Jump to navigation Jump to search
Line 1: Line 1:
=Code To Implement=
+
=Code To Investigate=
==Utilities==
+
==interface ImmutableList<E>==
===DefaultImmutableList<E>===
+
 
{{JavaToImplement|DefaultImmutableList|constructors<br/>head<br/>tail<br/>isEmpty<br/>|immutable.list.assignment}}
+
<nowiki>public interface ImmutableList<E> extends Iterable<E> {
class DefaultImmutableList implements [https://www.cse.wustl.edu/~cosgroved/courses/cse425s/spring20/apidocs/immutable/list/core/ImmutableList.html ImmutableList<E>]
+
/**
 +
* @return the head value if it is present
 +
* @throws NoSuchElementException if empty
 +
*/
 +
E head();
  
Note: consider using [https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html java.util.Optional]
+
/**
 +
* @return the tail if it is present
 +
* @throws NoSuchElementException if empty
 +
*/
 +
ImmutableList<E> tail();
  
Note: you need not implement iterator() now.  That will be the subject of a future studio.
+
/**
 +
* @return true if empty, false otherwise
 +
*/
 +
boolean isEmpty();
 +
}</nowiki>
  
 +
=Code To Implement=
 +
==Utilities==
 
===Lists===
 
===Lists===
 
{{JavaToImplement|Lists|nil<br/>cons<br/>brackets<br/>|immutable.list.assignment}}
 
{{JavaToImplement|Lists|nil<br/>cons<br/>brackets<br/>|immutable.list.assignment}}
Line 32: Line 46:
  
 
It is suggested that you adopt a recursive approach to solving this problem.  What is the base case?  What is the recursive case?
 
It is suggested that you adopt a recursive approach to solving this problem.  What is the base case?  What is the recursive case?
 +
 +
===enum EmptyImmutableList===
 +
{{JavaToImplement|EmptyImmutableList|constructor<br/>isEmpty<br/>head<br/>tail<br/>|immutable.list.assignment}}
 +
/* package-private */ enum EmptyImmutableList implements [https://www.cse.wustl.edu/~cosgroved/courses/cse425s/spring20/apidocs/immutable/list/core/ImmutableList.html ImmutableList<Object>]
 +
 +
WARNING: you need NOT implement iterator() now.  That will be the subject of a future studio.
 +
 +
===class NonEmptyImmutableList<E>===
 +
{{JavaToImplement|NonEmptyImmutableList|constructor<br/>isEmpty<br/>head<br/>tail<br/>|immutable.list.assignment}}
 +
/* package-private */ enum EmptyImmutableList implements [https://www.cse.wustl.edu/~cosgroved/courses/cse425s/spring20/apidocs/immutable/list/core/ImmutableList.html ImmutableList<Object>]
 +
 +
WARNING: you need NOT implement iterator() now.  That will be the subject of a future studio.
  
 
==Apps==
 
==Apps==
NOTE: Since the constructors on [[#DefaultImmutableList.3CE.3E|DefaultImmutableList<E>]] are package protected, you will need to use [[#nil|nil()]] and [[#cons|cons(head,tail)]].
+
NOTE: Since the constructors on our implementations are package protected, you will need to use [[#nil|nil()]] and [[#cons|cons(head,tail)]].
  
 
===Length===
 
===Length===

Revision as of 09:31, 15 September 2020

Code To Investigate

interface ImmutableList<E>

public interface ImmutableList<E> extends Iterable<E> {
	/**
	 * @return the head value if it is present
	 * @throws NoSuchElementException if empty
	 */
	E head();

	/**
	 * @return the tail if it is present
	 * @throws NoSuchElementException if empty
	 */
	ImmutableList<E> tail();

	/**
	 * @return true if empty, false otherwise
	 */
	boolean isEmpty();
}

Code To Implement

Utilities

Lists

class: Lists.java Java.png
methods: nil
cons
brackets
package: immutable.list.assignment
source folder: src/main/java

nil

public static <E> ImmutableList<E> nil()

Constructs a new empty list, analogous to the nil constructor for SML List.

cons

public static <E> ImmutableList<E> cons(E head, ImmutableList<E> tail)

Constructs a new list comprised of head::tail, analogous to the :: constructor for SML List.

brackets

public static <E> ImmutableList<E> brackets(E... elements)

Constructs an ImmutableList<E> whose contents are defined by the elements passed in.

The parameter E... arguments is an example usage of varargs in Java. You can treat parameter elements as if it is an E[]. The varargs ... simply allows for more convenient invocations of the brackets method.

In order to build this method, consider added a private static helper method to perform the actual work.

It is suggested that you adopt a recursive approach to solving this problem. What is the base case? What is the recursive case?

enum EmptyImmutableList

class: EmptyImmutableList.java Java.png
methods: constructor
isEmpty
head
tail
package: immutable.list.assignment
source folder: src/main/java

/* package-private */ enum EmptyImmutableList implements ImmutableList<Object>

WARNING: you need NOT implement iterator() now. That will be the subject of a future studio.

class NonEmptyImmutableList<E>

class: NonEmptyImmutableList.java Java.png
methods: constructor
isEmpty
head
tail
package: immutable.list.assignment
source folder: src/main/java

/* package-private */ enum EmptyImmutableList implements ImmutableList<Object>

WARNING: you need NOT implement iterator() now. That will be the subject of a future studio.

Apps

NOTE: Since the constructors on our implementations are package protected, you will need to use nil() and cons(head,tail).

Length

class: Length.java Java.png
methods: length
package: immutable.list.apps.assignment
source folder: src/main/java
public static <E> int length(ImmutableList<E> list)

SumProductCountdownFactorial

class: SumProductCountdownFactorial.java Java.png
methods: sum
product
countdown
factorial
package: immutable.list.apps.assignment
source folder: src/main/java

sum

public static int sum(ImmutableList<Integer> xs)

product

public static int product(ImmutableList<Integer> xs)

countdown

public static ImmutableList<Integer> countdown(int n)

factorial

public static int factorial(int n)

Concat

class: Concat.java Java.png
methods: concat
package: immutable.list.apps.assignment
source folder: src/main/java
public static <E> ImmutableList<E> concat(ImmutableList<E> xs, ImmutableList<E> ys)

Test

class: ImmutableListTestSuite.java Junit.png
package: immutable.list.assignment
source folder: src/test/java

Pledge, Acknowledgments, Citations

file: studio-immutable-list-pledge-acknowledgments-citations.txt

More info about the Honor Pledge