【问题标题】:escaping "\=" when using string_concatenate in SWIPL swi-prolog在 SWIPL swi-prolog 中使用 string_concatenate 时转义“\=”
【发布时间】:2012-09-16 05:21:15
【问题描述】:

我想在使用 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。我在这里缺少一些转义序列或方法吗?

谢谢!

【问题讨论】:

    标签: escaping prolog swi-prolog string-concatenation


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

    HTH

    【讨论】:

    • 感谢旗帜帮助。但是,我看到使用 string_concat 时,我仍然得到 2 个反斜杠。见代码:set_prolog_flag(character_escapes, false), string_concat('stack', '\=overflow', X), writeln(X)。输出为: stack\=overflow X = "stack\\=overflow" 因为我需要在程序的其他地方使用 X,所以它不应该有 \\=,而应该只有 \=。对此有何建议?谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-26
    • 2011-11-11
    • 2018-12-05
    • 1970-01-01
    • 2011-06-15
    • 2016-04-01
    • 1970-01-01
    相关资源
    最近更新 更多