Prolog将字符串转换为它的ascii数值

时间:2018-06-21 22:46:22

标签: string list prolog

我是新手。我正在尝试实现以下结构: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值,并将其放入列表[120]中。

为什么要这么做以及如何将其保留为字符串?

1 个答案:

答案 0 :(得分:1)

标准Prolog不支持字符串。它定义了一个标志double_quotes,该标志定义了双引号之间的文本解释。该标志的可能标准值为codescharsatomcodes值表示"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确实支持字符串类型。查看所用系统的文档。