在SWIPL swi-prolog中使用string_concatenate时转义“\ =”

时间:2012-09-16 05:21:16

标签: escaping prolog swi-prolog string-concatenation

我想在使用string_concat时逃避swipl中的反斜杠。

场景1-

string_concat('stack', ' overflow', Result).
Result = "stack overflow" 

情景2 -

string_concat('stack', ' \=overflow', Result).
Syntax error: Undefined character escape in quoted atom or string: `\='

场景3-

string_concat('stack', ' \\=overflow', Result).
Result = "stack \\=overflow" 

现在,scenario1的行为符合预期。我面临在scenario2中解释的情况,其中我需要连接包含反斜杠和等于的字符串。也就是说,string1只有文本,string2的文本中也包含\ =,我的结果应该是string1和string2连接。但是,在scenario2中仅使用\ =,会导致错误,要求我转义序列。现在,在scenario3中的转义给了我两个反斜杠和等号。我不想要两个反斜杠。

我的输出应该是stack \=overflow。我在这里缺少一些逃脱序列或方法吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

只有用于显示的双反斜杠:

?- string_concat(stack, ' \\=overflow', X), writeln(X).
stack \=overflow
X = "stack \\=overflow".

但您可以使用此标志更改行为:

?- set_prolog_flag(character_escapes,false).
true.

?- writeln('stack \=overflow').
stack \=overflow
true.

默认值true我收到您报告的错误:

?- set_prolog_flag(character_escapes,true).
true.

?- writeln('stack \=overflow').
ERROR: Syntax error: Undefined character escape in quoted atom or string: `\='
ERROR: writeln('stack \
ERROR: ** here **
ERROR: =overflow') . 

无论如何,我认为你应该在完成后将其值重置为默认值,或者仔细检查你的SW对文字的不良副作用。

HTH