class List { private Object car = null; private List cdr = null; List(Object car, List cdr) { this.car = car; this.cdr = cdr; } Object car() { return this.car; } List cdr() { return this.cdr; } boolean isNull() { return ((null == this.car) && (null == this.cdr) ); } public String toString() { String s = "("; if (null != this.car) { s = s + this.car; if (null != this.cdr) { s = s + " . " + cdr; } } return s + ")"; } public static void main (String[] args) { List lst = new List("foo", new List("bar", new List("baz", null))); System.out.println("lst = " +lst); System.out.println("car = " +lst.car()); System.out.println("cdr = " +lst.cdr()); System.out.println("is_member_iter(\"bar\"," + " lst) = " + Member.is_member_iter("bar", lst)); System.out.println("is_member(\"bar\"," + " lst) = " + Member.is_member("bar", lst)); System.out.println("is_member_iter(\"fum\"," + " lst) = " + Member.is_member_iter("fum", lst)); System.out.println("is_member(\"fum\"," + " lst) = " + Member.is_member("fum", lst)); System.out.println("rember(\"foo\", lst) = " + Member.rember("foo",lst)); System.out.println("rember(\"bar\", lst) = " + Member.rember("bar",lst)); System.out.println("rember(\"baz\", lst) = " + Member.rember("baz",lst)); System.out.println("rember(\"fum\", lst) = " + Member.rember("fum",lst)); } } class Member { static Boolean is_member_iter(Object a, List lob) { while (null != lob) { if (a.equals(lob.car())) return new Boolean(true); else lob = lob.cdr(); } return new Boolean(false); } static Boolean is_member(Object a, List lob) { if (null == lob) return new Boolean(false); else if (a.equals(lob.car())) return new Boolean(true); else return is_member(a, lob.cdr()); } static List rember(Object a, List lob) { if (null == lob) return null; else if (a.equals(lob.car())) return lob.cdr(); else return new List(lob.car(), rember(a, lob.cdr())); } }