# A Recursive List Paradigm Jack Beidler Yaodong Bi Bob McCloskey Computing Sciences University of Scranton Scranton, PA 18510.

## Presentation on theme: "A Recursive List Paradigm Jack Beidler Yaodong Bi Bob McCloskey Computing Sciences University of Scranton Scranton, PA 18510."— Presentation transcript:

A Recursive List Paradigm Jack Beidler Yaodong Bi Bob McCloskey Computing Sciences University of Scranton Scranton, PA 18510

CCSC-NE 2002www.cs.scranton.edu/~beidler/java/3 List Paradigms Lists and the Java API –Interface List and its implementations 25 methods Swiss Army Knif Approach (multiple paradigms) Focused Paradigms - a few well chosen coordinated methods –Array Analogy Paradigm –Positional Paradigm (One-way) –Positional Paradigm (Two-way) –Recursive Paradigm

CCSC-NE 2002www.cs.scranton.edu/~beidler/java/4 A Recursive List Paradigm McCarthys LISP http://www-formal.stanford.edu/jmc/history/lisp/lisp.html –A no compromise recursive paradigm –A list: isEmpty or (head, tail) –head is an object –tail is a (possibly empty) sublist –A Java Implementation 3 constructors 6 methods 2 utility methods

CCSC-NE 2002www.cs.scranton.edu/~beidler/java/5 A Recursive List Paradigm Constructors RecursiveList () empty list RecursiveList (Object Head) non-empty list w empty tail RecursiveList (Object Head, RecursiveList Tail) list with tail

CCSC-NE 2002www.cs.scranton.edu/~beidler/java/7 A Recursive List Paradigm Utility Methods void swap(RecursiveList List) String toString()

CCSC-NE 2002www.cs.scranton.edu/~beidler/java/8 A Recursive List Paradigm What about iterator support –Recursion is the traversal method

CCSC-NE 2002www.cs.scranton.edu/~beidler/java/9 Examples OrderedList Class (composed with RecursiveList) import java.util.*; class OrderedList { private Comparator c; protected RecursiveList L; OrderedList (Comparator c){ this.c = c; L = new RecursiveList(); }

CCSC-NE 2002www.cs.scranton.edu/~beidler/java/10 Examples OrderedList Class (composed with RecursiveList) … private void RecInsert (Object Obj, RecursiveList List){ if(List.isEmpty() || (c.compare(Obj, List.getHead())<0)) List.insert(new RecursiveList(Obj)); else RecInsert(Obj, List.tailOf()); } public void insert(Object Obj){ RecInsert(Obj, L); }

CCSC-NE 2002www.cs.scranton.edu/~beidler/java/11 Examples OrderedList Class (composed with RecursiveList) … private void Recmerge (RecursiveList Source1, RecursiveList Source2, RecursiveList Merged){ if (Source1.isEmpty()) Merged.swap(Source2); else if (Source2.isEmpty()) Merged.swap(Source1); else { if (c.compare(Source1.getHead(), Source2.getHead())<0) Merged.insert(Source1.remove()); else Merged.insert(Source2.remove()); Recmerge(Source1, Source2, Merged.tailOf()); }

CCSC-NE 2002www.cs.scranton.edu/~beidler/java/12 Examples OrderedList Class (composed with RecursiveList) … public void merge(OrderedList Source1, OrderedList Source2){ Recmerge(Source1.L, Source2.L, this.L); } public String toString(){ return L.toString(); }

CCSC-NE 2002www.cs.scranton.edu/~beidler/java/13 Examples OrderedList Class (composed with RecursiveList) –Simplicity of insert –Simplicity of merge What about iterator support –One moment please

CCSC-NE 2002www.cs.scranton.edu/~beidler/java/14 Unfocused vs. focused paradigms G&T –1 Constructors –13 Methods –0 Utility Methods RecursiveList –3 Constructors –6 Methods –2 Utility methods

CCSC-NE 2002www.cs.scranton.edu/~beidler/java/15 Unfocused vs. focused paradigms S –2 Constructors –14 Methods –0 Utility Methods RecursiveList –3 Constructors –6 Methods –2 Utility methods

CCSC-NE 2002www.cs.scranton.edu/~beidler/java/16 Unfocused vs. focused paradigms C&P –1 Constructors –7 Methods –0 Utility Methods RecursiveList –3 Constructors –6 Methods –2 Utility methods

CCSC-NE 2002www.cs.scranton.edu/~beidler/java/18 From the recursive paradigm to a positional paradigm void front() void rear() void next() void prev() void append(Object O) void setObject(Object O) Object getObject() boolean currDefined()

CCSC-NE 2002www.cs.scranton.edu/~beidler/java/19 From the recursive paradigm to a positional paradigm RecursiveList Order = new RecursiveList(); … RecursiveListIterator It = new RecursiveListIterator(Order); for (It.front(); It.currDefined(); It.next()) System.out.print(((Integer)It.getObject())+"\t"); System.out.println(); for (It.rear(); It.currDefined(); It.prev()) System.out.print(((Integer)It.getObject())+"\t"); System.out.println();

CCSC-NE 2002www.cs.scranton.edu/~beidler/java/20 Conclusions Lean, mean, well focused is usually better that the Swiss Army Knife approach http://www.cs.scranton.edu/~beidler/java/OneWay/ It is even nicer with trees –RecBinTree Class http://www.cs.scranton.edu/~beidler/java/RecBinTree/

Download ppt "A Recursive List Paradigm Jack Beidler Yaodong Bi Bob McCloskey Computing Sciences University of Scranton Scranton, PA 18510."

Similar presentations