Oh yes.... thanks Alex,
Regards,
Kashyap
On Sat, May 2, 2020 at 7:10 AM Alexander Burger <[email protected]> wrote:
> Hi Kashyap,
>
> > Could you please tell me why we have the cons(Nil, Nil); in gen3m.c right
> > after insert(&Intern, "NIL", romSym("NIL", "(Rom+1)")); ?
>
> This allocates a dummy cell, required by 'NIL'. From doc/structures you see
>
> NIL: /
> |
> V
> +-----+-----+-----+-----+
> |'NIL'| / | / | / |
> +-----+-----+-----+-----+
>
> ^
> |
> This is the dummy cell
>
> This cell is needed to allow for the dual nature of NIL, being both a
> symbol and
> as a cell (= empty list). PicoLisp demands that both (car NIL) and (cdr
> NIL)
> return NIL.
>
> If you do (val NIL) or (car NIL), the CDR of the first cell is accessed,
> but for
> (cdr NIL) the access goes to the next cell in memory, i.e. the dummy cell