0

使用 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 的行为符合预期。我遇到了场景 2 中解释的情况,我需要连接一个包含反斜杠和等于的字符串。即,string1 仅包含文本,string2 包含带有 \= 的文本,并且我的结果应该是 string1 和 string2 连接的。但是,在方案 2 中仅使用 \= 会导致错误要求我转义序列。现在,在场景 3 中转义给了​​我两个反斜杠和等号。我不想要两个反斜杠。

我的输出应该是完全正确stack \=overflow的。我在这里缺少一些转义序列或方法吗?

谢谢!

4

1 回答 1

1

双反斜杠仅用于显示:

?- 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 是否对文字产生了​​不必要的副作用。

高温高压

于 2012-09-16T07:28:53.717 回答