我使用的是 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 分别是 1、2 和 3 的 ASCII 值。
但是,如果我将数字和字母组合在一个术语中,则谓词 name/2
不起作用。例如,我希望 name(2a,X)
返回 X = [49, 97]
而 name(3b,X)
返回 X = [50,98]
。但是,解释器给出错误异常,指出需要运算符(operator)。
我注意到只有当术语以数字开头时才会出现问题。我在解释器中检查 name(a2,X)
按预期返回 X = [97, 49]
。
我该如何解决这个问题?或者这种情况在 Prolog 中无法处理?
最佳答案
3a
不是 Prolog 原子。要使它成为一个原子,请将其用单引号引起来:
'3a'
另外,查看 atom_chars/2
将原子与字符列表联系起来!
关于prolog - 从 Prolog 中的术语获取 ASCII 值列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50230829/