2014-10-22 29 views
2

我需要在序言中放置「」字符串。 我從另一個程序得到輸入,看起來我不能逃避「在這個程序中,所以我必須在序言中添加」,否則序言語句不起作用。SWI Prolog轉義引號

感謝您的幫助!

+0

你也可以考慮使用'atom_string/2',例如:'? - atom_string(monkey,String).'導致'String =「monkey」'。 – 2014-10-22 09:55:35

+1

謝謝你的回答。我得到了解決方案。我完全錯誤的做法。這是從SWI6到SWI7的變化。我再次安裝了SWI6.6,現在它完美運行。 – Tim 2014-10-22 10:51:20

+0

@Tim:對於雙引號列表,SWI7中有一些特定的非ISO更改。 – false 2014-10-22 11:33:15

回答

1

有關strings的討論,請看這裏,它們是SWI-Prolog特有的,但使用與原子相同的轉義規則。有很多方法可以在Prolog文本中將引號輸入到原子中:

1)將它們加倍。所以舉個例子,'不可能'是一個原子, 帶有單引號作爲第四個字符,並且沒有其他 單引號。

2)用反斜槓轉義它們。因此,例如 '不能'是與'不能'相同的原子。

3)使用八進制代碼和關閉反斜槓對它們進行字符編碼。因此,例如「可以\'不能'是與'不能'相同的原子。

4)使用十六進制代碼和關閉反斜槓對它們進行字符編碼。因此,例如'can \ x27 \ t'是與'不能''相同的原子。

上述可能性全部在ISO標準中定義。 Prolog的實現可能會定義更多的可能性。

再見

P.S。:以下是在SWI-Prolog的運行的例子,使用不同的 例如字符。在下面的第一個示例查詢中,您不需要 需要加倍,只能對周圍報價進行加倍。

下最後一個例子查詢顯示SWI-Prolog的特定的語法 未在ISO標準中,即使用反斜槓 U帶固定寬度的十六進制代碼:

Welcome to SWI-Prolog (Multi-threaded, 64 bits, Version 7.1.33) 
Copyright (c) 1990-2015 University of Amsterdam, VU Amsterdam 

?- X = 'she said "bye"'. 
X = 'she said "bye"'. 

?- X = 'she said \"bye\"'. 
X = 'she said "bye"'. 

?- X = 'she said \42\bye\42\'. 
X = 'she said "bye"'. 

?- X = 'she said \x22\bye\x22\'. 
X = 'she said "bye"'. 

?- X = 'she said \u0022bye\u0022'. 
X = 'she said "bye"'. 
+0

您在上面使用了哪個SWI-Prolog?如果是7.x,你是否使用命令行選項「--traditional」? – repeat 2015-08-19 16:24:16

+0

你爲什麼問?我的回答有問題嗎?唯一的非ISO是\ uXXXX語法。我不知道它是否已經存在於SWI6中,還是隻存在於SWI7中。 – 2015-08-19 16:27:12

+0

我只是好奇! – repeat 2015-08-19 16:28:47