Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


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

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

2 A Recursive List Paradigm List Paradigms A Recursive List Paradigm Examples Unfocused vs. focused paradigms From the recursive paradigm to a positional paradigm

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

4 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

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

6 A Recursive List Paradigm Methods boolean isEmpty() RecursiveList tailOf() Object getHead() void setHead(Object NewHead) void insert(RecursiveList List) RecursiveList remove()

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

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

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

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

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

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

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

14 Examples What about iterator support

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

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

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

18 From the recursive paradigm to a positional paradigm What about iteration? What about the positional paradigm? Constructed on top of the recursive paradigm.

19 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()

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

21 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


Ads by Google