2010-01-19 26 views
2

我想在我的Prolog輸出代碼中顯示網絡共享路徑。如何在SWI-Prolog中顯示黑色哈希值

的路徑是這樣的:

\\fileserver\path\to\file.txt (ex1) 

     or 
\\\\fileserver\\path\\to\\file.txt (ex2) 

但如果我嘗試使用的格式顯示它:

pri(Z):- 
    format('Printing Zx : \"~w\"',[Z]). 

斜線會被截斷,以

\fileserverpathtofile.txt (ex1) 

顯然,有些時候,路徑可能包含\\\\,在這種情況下顯示是正確的。

如何讓它打印正確的路徑?

請任何幫助。

謝謝。

+1

奇怪。我只是在SWI-Prolog頂層嘗試'format('打印Zx:\「〜w \'',['\\\\ fileserver \\ path \\ to \\ file.txt'])。精細。你確定反斜槓首先是正確的嗎?另外,你不需要在這樣的單引號原子內跳過雙引號。 – bcat 2010-01-19 14:31:47

+0

如果有四個斜槓,它工作正常。但是這個路徑是從外部來的,我有時候只會得到\\ fileserver \ path \到\ file.txt,在這種情況下,單個斜槓會被剝離。這是問題 – JPro 2010-01-19 14:42:26

+0

嘗試使用這種格式('Printing Zx:\「〜w \'',['\\ fileserver \ path \ to \ file.txt']) – JPro 2010-01-19 14:44:19

回答

1

在Prolog原子中,反斜槓是一個元字符,即如果你想讓你的原子包含一個反斜槓字符,那麼你需要使用反斜槓字符來轉義它。例如。爲了表示Windows路徑\\fileserver\path\to\file.txt因爲你需要寫

Path = '\\\\fileserver\\path\\to\\file.txt'. 

原則上有印刷的東西了兩種方式的Prolog原子,一個爲人類(漂亮打印),使用write

?- Path = '\\\\fileserver\\path\\to\\file.txt', write(Path). 
\\fileserver\path\to\file.txt 

,一個用於機器(串行化),使用write_canonical

?- Path = '\\\\fileserver\\path\\to\\file.txt', write_canonical(Path). 
'\\\\fileserver\\path\\to\\file.txt' 

write_canonical使得河畔e Prolog可以將輸出讀回同一個確切的原子。

你的問題似乎是你沒有正確代表Prolog中的路徑。如果路徑來自外部源,則首先需要將其轉義(在每個反斜槓前添加一個反斜槓),然後才能將其作爲Prolog原子存儲。

+0

謝謝。有什麼方法可以在Prolog中使用任何謂詞在每個反斜槓前面添加backslah? – JPro 2010-01-27 20:21:05

+0

據我所知,沒有內置的謂詞可以讓你修改Prolog原子,比如你需要自己實現這個:將原子分成字符列表,遍歷這個列表構建一個新的列表,每個反斜槓都有一個額外的反斜槓,將這個列表轉換回原子。 – Kaarel 2010-01-28 01:01:33