首页 > 解决方案 > 从 Prolog 中的术语获取 ASCII 值列表

问题描述

我正在使用 SWI-Prolog 版本 7.6.3,我最近遇到了一个问题,将结合数字和字母的术语转换为其 ASCII 值列表。

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

谓词name/2也适用于数字。如果我想获取术语123or的 ASCII 值'123',那么我们可以使用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 中处理?

标签: prologascii

解决方案


3a不是 Prolog 原子。要使其成为原子,请将其写在单引号中:

'3a'

此外,请查看atom_chars/2将原子与字符列表相关联!


推荐阅读