我是新手。我正在尝试实现以下结构: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]
中。
为什么要这么做以及如何将其保留为字符串?
答案 0 :(得分:1)
标准Prolog不支持字符串。它定义了一个标志double_quotes
,该标志定义了双引号之间的文本解释。该标志的可能标准值为codes
,chars
和atom
。 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确实支持字符串类型。查看所用系统的文档。