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)) |