<user3456>
I'm trying to wrap my head around how NIL works
<user3456>
the reference says it has a special structure of 'LIN' | / | / | /
<user3456>
I understand how it fulfills the symbol properties (VAL points to nil, property list is immediately terminated with the number name)
<user3456>
I also understand how its CDR is NIL, but I don't see how the CAR is NIL; 'LIN' is a short number which means it's not the empty list nor is it a symbol
<user3456>
(I'm interpreting / to be a pair that points to the first cell's CAR)
f[x] has joined #picolisp
f[x] has quit [Remote host closed the connection]
<abu[7]>
The pointer to the symbol points to the middle of the cell (an offset of 8 bytes) so that the pointer has the proper tag bit. The 'car' and 'val' functions just dereferece the pointer, returning the value in the CDR part of that cell
<abu[7]>
To access the symbol's TAIL, the pointer with an offset -8 must be used