/**
 * Things that are a lot like Scheme lists.
 *
 * @author Samuel A. Rebelsky
 * @author Yvonne Palm
 * @author "Better Late Than Never" Leach
 */
public interface SchemeList
{
  /** 
   * Determine if this list is empty.
   */
  public boolean isEmpty();

  /**
   * Create a new list by adding something to the front of this list.
   */
  public SchemeList addToFront(Object val);
  
  /**
   * Get the initial element of the list.
   */
  public Object car()
    throws EmptyListException;

  /**
   * Get a list that contains all but the first element.
   */
  public SchemeList cdr()
    throws EmptyListException;
} // interface SchemeList

