从Prolog中的术语获取ASCII值列表

从Prolog中的术语获取ASCII值列表,prolog,ascii,Prolog,Ascii,我使用的是SWI Prolog版本7.6.3,最近我遇到了一个将数字和字母组合成ASCII值列表的术语转换问题 我知道我们可以使用name/2谓词获得特定术语的ASCII值列表。例如,如果我想获取术语ab或'ab'的ASCII值,那么我们可以使用name(ab,X)。Prolog只输出X=[97,98],97和98分别是a和b的ASCII值 谓词name/2也适用于数字。如果我想获得术语123或'123'的ASCII值,那么我们可以使用name(123,X)。同样,Prolog只输出X=[49,

我使用的是SWI Prolog版本7.6.3,最近我遇到了一个将数字和字母组合成ASCII值列表的术语转换问题

我知道我们可以使用
name/2
谓词获得特定术语的ASCII值列表。例如,如果我想获取术语
ab
'ab'
的ASCII值,那么我们可以使用
name(ab,X)
。Prolog只输出
X=[97,98]
,97和98分别是a和b的ASCII值

谓词
name/2
也适用于数字。如果我想获得术语
123
'123'
的ASCII值,那么我们可以使用
name(123,X)
。同样,Prolog只输出
X=[49,50,51]
,其中49,50和51对应于ASCII值1,2和3

但是,如果我将数字和字母组合在一个词中,谓词
name/2
就不起作用。例如,我期望
name(2a,X)
返回
X=[49,97]
name(3b,X)
返回
X=[50,98]
。但是,解释器给出了错误异常,表示需要运算符

我注意到,只有当术语以数字开头时,问题才会出现。我在解释器中检查
name(a2,X)
是否按预期返回
X=[97,49]


我如何解决这个问题?或者,这种情况本来就不能在Prolog中处理?

3a
不是Prolog原子。要使其成为atom,请用单引号将其括起来:

'3a'


另外,请查看原子字符/2,将原子与字符列表关联起来

使用
'3a'
表示原子,更好的是,使用
原子字符/2
@马特:这正是我读到问题时的想法。如果你能把这篇文章作为一个答案,我可以投它一票…;-)