/**
 * Oooh.  Lists.  Pretty.
 *
 * @author Lots of fun folks.
 */
public class RealSchemeList
{
  // Fields
  Object car;
  RealSchemeList cdr;

  // Constructors
  RealSchemeList(Object car, RealSchemeList cdr) {
    this.car = car;
    this.cdr = cdr;
  } // RealSchemeList(Object, RealSchemeList) 

  /**
   * Get the first element of this list.
   */
  public Object car() {
    return this.car;
  } // car()

  /**
   * Get all but the first element of this list.
   */
  public RealSchemeList cdr() {
    return this.cdr;
  } // cdr()

  /**
   * Create a new list.  
   */
  public static RealSchemeList cons(Object head, RealSchemeList tail) {
    return new RealSchemeList(head, tail);
  } // cons(Object, RealSchemeList)

  /**
   * Make an empty list.
   */
  public static RealSchemeList empty() {
    return null;
  } // empty()

  /**
   * Check if a list is empty.
   */
  public static boolean isEmpty(RealSchemeList lst) {
    return lst == null;
  } // isEmpty(RealSchemeList)
} // RealSchemeList

