prolog - 从 Prolog 中的术语获取 ASCII 值列表
问题描述
我正在使用 SWI-Prolog 版本 7.6.3,我最近遇到了一个问题,将结合数字和字母的术语转换为其 ASCII 值列表。
我知道我们可以使用name/2
谓词获取特定术语的 ASCII 值列表。例如,如果我想获取术语ab
or的 ASCII 值'ab'
,那么我们可以使用name(ab,X)
. Prolog 简单地输出X = [97, 98]
, 97 和 98 分别是 a 和 b 的 ASCII 值。
谓词name/2
也适用于数字。如果我想获取术语123
or的 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 中处理?
解决方案
3a
不是 Prolog 原子。要使其成为原子,请将其写在单引号中:
'3a'
此外,请查看atom_chars/2
将原子与字符列表相关联!
推荐阅读
- json - 我可以从用 OpenApi 3.0 编写的 Json 中引用用 Swagger 2.0 编写的 json
- php - Python - 如何将 IP 地址发送到 PHP?
- csv - BigQuery:导入 CSV 时无法识别时区
- lightgbm - 二进制:LightGBM 中的逻辑类参数
- sql - SQL - 重复需要多行
- c# - 在 RichTextBox C# 中添加多个非 url 超链接,为每个超链接抛出一个事件
- javascript - dc.js 使用两组的箱线图缩减器
- numpy - 改变学习率后 SGD 发散
- laravel - 会话开始失败 Laravel
- r - 在 R 中,如何检查一列中的记录是否与某个值匹配,如果匹配,则更改另一列中的记录?