I am using SWI-Prolog version 7.6.3 and I recently encounter a problem for converting a term that combines number and alphabet into its list of ASCII values.
I know that we can obtain the list of ASCII values of a particular term using name/2 predicate. For example, if I want to get the ASCII value of the term ab or 'ab', then we can use name(ab,X). Prolog simply outputs X = [97, 98], 97 and 98 are respectively the ASCII values of a and b.
The predicate name/2 also works for numbers. If I want to get the ASCII values of the term 123 or '123', then we can use name(123,X). Again, Prolog simply outputs X = [49, 50, 51] where 49, 50, and 51 are correspondingly the ASCII values of 1, 2, and 3.
However, the predicate name/2 does not work if I combine number and alphabet in one term. For example, I expect that name(2a,X) returns X = [49, 97] and name(3b,X) returns X = [50,98]. However, the interpreter gives the error exception saying that an operator is expected.
I notice that the problem only occurs if the term begin with number. I check in the interpreter that name(a2,X) returns X = [97, 49] as expected.
How do I solve this problem? Or this condition inherently cannot be handled in Prolog?
'3a'to denote the atom, and better yet, useatom_chars/2! - mat