project09 - template

This commit is contained in:
2025-11-08 21:44:08 -05:00
parent c4852a88b6
commit 35777dcdff
15 changed files with 997 additions and 0 deletions

48
09/List/List.jack Normal file
View File

@@ -0,0 +1,48 @@
// 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/9/List/List.jack
/** Represents a linked list of integers. */
class List {
field int data; // an int value,
field List next; // followed by a list of int values
/* 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() {
// Sets current to the first element of this list
var List current;
let current = this;
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();
}
// Calls an OS routine to free the memory of this object.
do Memory.deAlloc(this);
return;
}
// More list processing methods can come here.
}

17
09/List/Main.jack Normal file
View File

@@ -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/9/List/Main.jack
/** An example of creating and using List objects. */
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;
}
}