2017-04-16 40 views
1

它的工作SWI-Prolog的4之間的差異正在定條款文法,</p> <pre><code>letter(X) --> [C], {"a"=<C, C=<"z", name(X,[C])}. </code></pre> <p>而在SWI-Prolog的7以下SWI-Prolog的7及以上

:- set_prolog_flag(double_quotes, codes). 
letter(X) --> [C], {"a"=<C, C=<"z", name(X,[C])}. 

在SWI搜索-Prolog網站,我發現:

Mode--------------double_quotes-----------back_quotes 
Version 7 default-----string------------------codes 
--traditional----------codes--------------symbol_char 

那麼,爲什麼

letter(X) --> [C], {`a`=<C, C=<`z`, name(X,[C])}. 

不起作用?

+2

SWI 7摧毀與早期版本兼容。你可以使用'--traditional'來獲得基本的ISO合規性。另外,我建議'chars'而不是'codes'在所有版本和其他Prolog系統中都輸出更好的輸出。 – mat

+2

用'char_code(X,C)'更好地替換'name(X,[C])' - 這在每個地方都更好 – false

回答

0

只是爲了簡化的背景下,讓我們來測試等價表達式(一個目標一起)

?- C=0'd, `a` =< C, C =< `z`. 
C = 100. 

似乎它的工作...

?- [user]. 
letter(X) --> [C], {`a`=<C, C=<`z`, name(X,[C])}. 
|: ^Dtrue. 

?- phrase(letter(X), `d`). 
X = d. 
相關問題