Integers, floating points, and strings are primitive values. When manipulated on the stack, these values are copied, rather than referenced. Lists and blocks are manipulated by reference rather than by value.
Lists are cons pairs, where the cdr must be a list. There is a special value of a list called nil, which represents the empty list. Lists are immutable, in that their cars and cdrs cannot be set after creation of the list.
Blocks are fixed-length arrays, which can be tagged as structs or arrays. Most operations do not distinguish between blocks that have different tags, though there are some exceptions.
Null values are initialized. Blocks that are not created with initializer values have null in their elements. Operations that expect specific types typically throw an error specifically stating when they receive an uninitialized value.