2012-09-16 22 views
1

我想在使用string_concat時在swipl中轉義反斜槓。當在SWIPL中使用string_concatenate時轉義「 =」swi-prolog

場景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中解釋的情況,在這裏我需要連接一個包含反斜槓和equalto的字符串。即,string1只有文本,string2的文本中有\ =也在其中,我的結果應該是string1和string2連接。但是,僅僅使用\ =與scenario2中的結果一樣會導致錯誤,要求我跳過序列。現在,如情景3中的轉義給我兩個反斜槓和等號。我不想要兩個反斜槓。

我的輸出應該完全是stack \=overflow。有沒有我在這裏失蹤的轉義序列或方法?

謝謝!

回答

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') . 

無論如何,我認爲你應該重置它的價值默認完成後,或雙重檢查你的軟件對文字的不良副作用。

HTH

+0

感謝您的幫助。然而,我看到,當使用string_concat時,我仍然得到2個反斜槓。參見代碼: set_prolog_flag(character_escapes,false),string_concat('stack','\ = overflow',X),writeln(X)。 給出作爲輸出: 堆棧\ =溢出 X =「\\堆棧溢出=」 由於我需要使用在其他地方X在節目中,它不應該; t有所述\\ =,而不是隻應有\ =。對此有何建議?謝謝。 – user1644208

相關問題