-
Notifications
You must be signed in to change notification settings - Fork 0
/
List.jack
63 lines (53 loc) · 1.94 KB
/
List.jack
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
// 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 Square data; // a list consists of a data field,
field List next; // followed by a list
/* Creates a List. */
constructor List new(Sqaure square, List cdr) {
let data = square; // the identifiers car and cdr are used in
let next = cdr; // memory of the Lisp programming language
return this;
}
/** Accessors. */
method Square getData() { return data; }
method List getNext() { return next; }
/** Prints this list. */
method void print() {
var List current;
var Square square;
//let square = Square.new(1,1,1); ; // initializes current to the first item
let current = this; // of this list
let square = current.getData();
while (~(current = null)) {
do Output.printInt(square.getX());
do Output.printInt(square.getY());
do Output.printChar(32); // prints a space
let current = current.getNext();
}
return;
}
// 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.
}