explain ailib cell data structure a cell has two fields: head, tail we use cells to store two kinds of things: list, atom 1) list a list is a linked list. head points to "value" which is atom or another list. tail points to another cell. list ends with tail equals NIL. [ : ] -> [ : ] -> ... [ : NIL] 2) atom head of atom stores its type: name, number tail of atome is its value. atom of type name has its value as a pointer to string table. atome of type number has its value as integer. [type : value] How to differentiate list from atom? cells[.] are array of cell. It is divided into two parts. list and atom are allocated from different parts of cells[.]. atoms are allocated from the "lower" part and lists are allocated from the "upper" part. ATOMTYPE is the divide line between lower and upper part. The total number of atome in the system determines where to set ATOMTYPE. We can distinguish atom and list by looking at its pointer (an index). if idx < ATOMTYPE it is an atom else it is a list cells [ ... [ : ] [ : ] ...] atoms ^ lists | ATOMTYPE Here are some examples example 1: list of number. (1,2,3) 1000 [10 : 1002], 1002 [12 : 1004], 1004 [14 : NIL] 10 [number : 1] 12 [number : 2] 14 [number : 3] example 2: list of name. ("a","b") 2000 [20 : 2002], 2002 [22 : NIL] 20 [name : 0] 22 [name : 2] string table index 0 2 ["a", "b" ...] example 3: complex list. ("a", (1,2)) 3000 [30 : 3002], 3002 [3010 : NIL] 3010 [32 : 3012], 3012 [34 : NIL] 30 [name : 0] 32 [number : 1] 34 [number : 2] string table index 0 2 ["a", "b" ...] last update 7 April 2022