Thanks to @gtoal for the suggestion of using two Scratch lists, one for CARs and one for CDRs, and for suggesting a simplification of allocation and freeing. This project implements a pair (aka "cons cell") data type, which has two fields, which are called the CAR and the CDR (because of the architecture that Lisp was originally implemented on), and a variable, NIL, which is used as an empty linked list. A linked list is implemented as either NIL, or a pair that's CAR is the first item of the list, and CDR is the rest of the list (a list itself). Pairs are constructed using the CONS block. Their CARs and CDRs can then be accessed by using the CAR OF and CDR OF blocks. The SET CAR OF TO and SET CDR OF TO blocks modify the CAR or CDR of a pair. Unfortunately, you need to manually free pairs if you don't want to leak memory, as this doesn't have any garbage collection. The FREE block marks the memory used by a pair as unused, so a future CONS operation can reuse the memory. Don't use a pair after you have freed it. CAAR OF, CADR OF, CDAR OF and CDDR OF are compositions of CAR OF and CDR OF. If you ignore the C and Rs and the OF at the end, and replace all As with "CAR of" and all Ds with "CDR of", then you will see what these blocks do. For example, CDAR gets the CDR of the CAR of a pair.