# 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

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

A Recursive List Paradigm McCarthys LISP http://www-formal.stanford.edu/jmc/history/lisp/lisp.html –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

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

A Recursive List Paradigm Utility Methods void swap(RecursiveList List) String toString()

A Recursive List Paradigm What about iterator support –Recursion is the traversal method

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(); }

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); }

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()); }

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(); }

Examples OrderedList Class (composed with RecursiveList) –Simplicity of insert –Simplicity of merge –But what about iteration?? (be patient)

Unfocused vs. focused paradigms G&T –1 Constructors –13 Methods –0 Utility Methods RecursiveList –3 Constructors –6 Methods –2 Utility methods

Unfocused vs. focused paradigms S –2 Constructors –14 Methods –0 Utility Methods RecursiveList –3 Constructors –6 Methods –2 Utility methods

Unfocused vs. focused paradigms C&P –1 Constructors –7 Methods –0 Utility Methods RecursiveList –3 Constructors –6 Methods –2 Utility methods

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 offRear() boolean backingUp()

From the recursive paradigm to a positional paradigm RecursiveList Order = new RecursiveList(); … RecursiveListIterator It = new RecursiveListIterator(Order); for (It.front(); !It.offRear(); It.next()) System.out.print(((Integer)It.getObject())+"\t"); System.out.println(); for (It.rear(); It.backingUp(); It.prev()) System.out.print(((Integer)It.getObject())+"\t"); System.out.println();

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