PL_get_*() also 
validate the type and thus the two sections below are equivalent.
        if ( PL_is_atom(t) )
        { char *s;
          PL_get_atom_chars(t, &s);
          ...;
        }
or
        char *s;
        if ( PL_get_atom_chars(t, &s) )
        { ...;
        }
VersionĀ 7 added PL_NIL, PL_BLOB,
PL_LIST_PAIR and PL_DICT. Older versions 
classify PL_NIL and PL_BLOB as PL_ATOM,
PL_LIST_PAIR as PL_TERM and do not have dicts.
| PL_VARIABLE | A variable or attributed variable | 
| PL_ATOM | A Prolog atom | 
| PL_NIL | The constant [] | 
| PL_BLOB | A blob (see section 12.4.10.2) | 
| PL_STRING | A string (see section 5.2) | 
| PL_INTEGER | A integer | 
| PL_RATIONAL | A rational number | 
| PL_FLOAT | A floating point number | 
| PL_TERM | A compound term | 
| PL_LIST_PAIR | A list cell ( [H|T]) | 
| PL_DICT | A dict (see section 5.4)) |