我想在使用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
。我在这里缺少一些逃脱序列或方法吗?
谢谢!
答案 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