You already have found the relevant descriptions, that state that code_type(Code, Type) holds a relation between a character code and his classification.
I think the manual is a bit misleading, because Prolog symbols are different than C (or Java, to say) symbols. These latter can be described with a regular expression like [_a-zA-Z][_a-zA-Z0-9]*, equivalent to the readable descriptions you cite.
Then c9 is a valid C symbol, while 9c is not (a digit cant start a symbol).
To inspect all 'properties' of a character (I assume you are aware of differences between character code - an integer - and the encoded character - localized), you could use
?- char_type(v,T).
T = alnum ;
T = alpha ;
T = csym ;
T = csymf ;
T = ascii ;
T = graph ;
T = lower ;
T = lower('V') ;
T = to_lower('V') ;
T = to_upper(v) ;
false.
Then v could start a C symbol.
?- char_type('7',T).
T = alnum ;
T = csym ;
T = ascii ;
T = digit ;
T = graph ;
T = to_lower('7') ;
T = to_upper('7') ;
T = digit(7) ;
T = xdigit(7).
We miss csymf here, then 7 cannot start a C symbol.
To get all the characters that can start a C symbol, you could use
?- forall(char_type(X,csymf),write(X)).
ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyzªµºÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ
true.
I think your result could be different than mine, depending on your locale.
char_type/2and be aware that only Latin-1 characters are generated. Yet,char_type/2is defined for all Unicode characters. This is very SWI-specific. - false