Hi Kashyap,

> I am having some trouble following what's going on in the in the intern
> logic. It took me some time to realize that Intern[2] was essentially
> forming the node of a binary tree :)

Correct, at least in pil64 and miniPicoLisp (in pil32 and Ersatz it is a hash
table).


> What's the purpose of the tables - Ascii6 and Ascii7? I tried looking for a
> writeup on string/symbol implementation but couldn't find it.

This is only in miniPicoLisp. To save space, it packs text in six or seven bits
per character. This is specified in miniPicoLisp/doc/structures

      ASCII-6/7 -> 96 characters:
          xxxxx0     NUL sp ./<> a-z
         xxxxxx1     !"#$%&'()*+,- 0-9 :;=?@ A-Z [\]^_`{|}~

As you see, the distinction is made on bit zero. Presumably often used
characters occupy only 6 bits.


> In the the intern function there is a isTxt if block - is a symbol ever not
> txt?

Yes. We must distinguish between a symbol (a structure composed of at least one
cell) and its name (a bit pattern, basically a number).

The name in miniPicoLisp can either be 'txt' if it is short (again, see
miniPicoLisp/doc/structures)

              sym
              |
              V
        +-----+-----+
        | txt | val |
        +-----+-----+

or of arbitrary size

               sym
               |
               V
         +-----+-----+
         |  |  | val |
         +--+--+-----+
            | tail (only name, no properties)
            V
      +-----+-----+
      | bin |  |  |
      +-----+--+--+
               |
               V
         +-----+-----+
         | bin |  |  |
         +-----+--+--+
                  |
                  V
            +-----+-----+
            | bin | num |
            +-----+-----+

- Alex

-- 
UNSUBSCRIBE: mailto:[email protected]?subject=Unsubscribe

Reply via email to