diff options
author | Yuchen Pei <me@ypei.me> | 2017-11-29 12:30:41 +0100 |
---|---|---|
committer | Yuchen Pei <me@ypei.me> | 2017-11-29 12:30:41 +0100 |
commit | a000308104aab27c2dde9a306f1bc654b2db4806 (patch) | |
tree | aecc628e14c1628b5714281437aba18680cdc27b /projects/09/List |
first commit
Diffstat (limited to 'projects/09/List')
-rw-r--r-- | projects/09/List/List.jack | 46 | ||||
-rw-r--r-- | projects/09/List/Main.jack | 17 |
2 files changed, 63 insertions, 0 deletions
diff --git a/projects/09/List/List.jack b/projects/09/List/List.jack new file mode 100644 index 0000000..c62fe28 --- /dev/null +++ b/projects/09/List/List.jack @@ -0,0 +1,46 @@ +// This file is part of www.nand2tetris.org +// and the book "The Elements of Computing Systems" +// by Nisan and Schocken, MIT Press. +// File name: projects/09/List/List.jack + +/** Represents a linked list of integers. */ +class List { + field int data; // a list consists of a data field, + field List next; // followed by a list + + /* Creates a List. */ + constructor List new(int car, List cdr) { + let data = car; // the identifiers car and cdr are used in + let next = cdr; // memory of the Lisp programming language + return this; + } + + /** Accessors. */ + method int getData() { return data; } + method int getNext() { return next; } + + /** Prints this list. */ + method void print() { + var List current; // initializes current to the first item + let current = this; // of this list + while (~(current = null)) { + do Output.printInt(current.getData()); + do Output.printChar(32); // prints a space + let current = current.getNext(); + } + return; + } + + /** Disposes this List by recursively disposing its tail. */ + method void dispose() { + if (~(next = null)) { + do next.dispose(); + } + // Uses an OS routine to recycle this object. + do Memory.deAlloc(this); + return; + } + + // More list processing methods can come here. + +} diff --git a/projects/09/List/Main.jack b/projects/09/List/Main.jack new file mode 100644 index 0000000..824eb6f --- /dev/null +++ b/projects/09/List/Main.jack @@ -0,0 +1,17 @@ +// This file is part of www.nand2tetris.org +// and the book "The Elements of Computing Systems" +// by Nisan and Schocken, MIT Press. +// File name: projects/09/List/Main.jack + +/** Demonstrates the use of the List abstraction. */ +class Main { + function void main() { + // Creates and uses the list (2,3,5). + var List v; + let v = List.new(5,null); + let v = List.new(2,List.new(3,v)); + do v.print(); // prints 2 3 5 + do v.dispose(); // disposes the list + return; + } +} |