单引号的项目总是原子。
双引号的含义取决于Prolog标志double_quotes:
atom —
使用此值"a" = a。如今,这很少使用。但是你会发现写有["abc.pl"] 的 Prolog 书籍。
codes —
字符代码列表。这通常是默认值,但它会导致非常难以理解的答案,例如
?-
set_prolog_flag(double_quotes,codes).
真的。
?-
短语((“Ja tvoi”,(“sluga”|“rabotnik”),“!”),Satz)。
萨茨 = [74,97,32,116,118,111,105,32,115,108,117,103,97,33] ;
萨茨 = [74,97,32,116,118,111,105,32,114,97,98,111,116,110,105,107,33]。
更糟糕的是,如果您使用 ASCII 以外的字符:
?-
短语(("Я твой ",("слуга"|"работник"),"!"), Satz)。
萨茨 = [1071,32,1090,1074,1086,1081,32,1089,1083,1091,1075,1072,33];
萨茨 = [1071,32,1090,1074,1086,1081,32,1088,1072,1073,1086,1090,1085,1080,1082,33]。
chars
— 单字符原子列表。 See this 了解更多信息。
?-
set_prolog_flag(double_quotes,chars).
真的。
?-
短语((“Ja tvoi”,(“sluga”|“rabotnik”),“!”),Satz)。
Satz = ['J',a,' ',t,v,o,i,' ',s,l,u,g,a,!] ;
Satz = ['J',a,' ',t,v,o,i,' ',r,a,b,o,t,n,i,k,!]。
?-
短语(("Я твой ",("слуга"|"работник"),"!"), Satz)。
Satz = ['Я',' ',т,в,о,й,' ',с,л,у,г,а,!] ;
Satz = ['Я',' ',т,в,о,й,' ',р,а,б,о,т,н,и,к,!]。
这种表示法给出了更易读的答案,并且是Scryer 和Trealla 中的默认值,它们使用双引号表示法更紧凑地显示它们,以打印任何单字符原子列表。对于SICStus 和SWI,可以使用以下库进行模拟。
?-
use_module(library(double_quotes)).
真的。
?-
短语((“Ja tvoi”,(“sluga”|“rabotnik”),“!”),Satz)。
Satz = “Ja tvoi sluga!” ;
Satz =“Ja tvoi rabotnik!”。
?-
短语(("Я твой ",("слуга"|"работник"),"!"), Satz)。
Satz = "Я твой слуга!" ;
Satz = "Я твой работник!"。
如果您在将 double_quotes.pl 安装为库时遇到困难,只需将其放入其他 Prolog 文件的目录中并说:use_module(double_quotes).