首页 > 解决方案 > Prolog 将字符串转换为其 ascii 数值

问题描述

我是序言的新手。我试图实现以下结构:equ([v(_Val,_Name)]).

我试图写以下内容:add(Eq,equ([]),Eq).

我想使用以下测试:add(equ([v(1.0,"x")]),equ([]),L).

预期的输出是:L = equ([v(1.0,"x")]). 我得到的输出:L = equ([v(1.0,[120])]).

出于某种原因,它将字符串转换"x"为它的 ascii 值 a 将其放入列表中:[120]

为什么会这样,我怎样才能将它保存为字符串?

标签: stringlistprolog

解决方案


标准 Prolog 不支持字符串。它定义了一个标志 ,它定义了double_quotes双引号之间文本的解释。标志的可能标准值是codescharsatom。该codes值意味着"x"被解释为字符代码列表,从而为您提供观察到的结果。您可以通过以下查询确认:

| ?- current_prolog_flag(double_quotes, Value).

它很可能会返回绑定:

Value = codes

但请注意,在您的具体示例中,您可以简单地编写:

add(equ([v(1.0,x)]),equ([]),L).

如果您的字符串可能以大写字母开头或包含例如空格或标点符号,那么一个选项是将文本括在单引号之间,使其成为 Prolog atom。例如:

add(equ([v(1.0,'Foo bar.')]),equ([]),L).

atom您还可以使用查询将标志的值更改为:

| ?- set_prolog_flag(double_quotes, atom).

但该值codes是唯一一个真正可跨 Prolog 实现移植的值。一些 Prolog 系统,例如 ECLiPSe 和 SWI-Prolog 确实支持字符串类型。检查您正在使用的系统的文档。


推荐阅读