我是Prolog的新手,注意到'和'给出了不同的行为,但对原因却感到好奇。特别是,在加载文件时,?- ['test1.pl'].
有效,而?- ["test1.pl"].
无效。
最佳答案
单引号始终是原子。
双引号的含义取决于Prolog标志double_quotes
:
atom
—
具有此值"a" = a
。如今,这已很少使用。但是您会发现Prolog书籍中写了["abc.pl"]
。
codes
—
字符代码列表。这通常是默认设置,但是会导致非常难以理解的答案,例如
?-set_prolog_flag(双引号,代码)。
真正。
?-短语((“Ja tvoi”,(“sluga” |“rabotnik”),“!”),Satz)。
Satz = [74,97,32,116,118,111,105,32,115,108,117,103,97,33];
Satz = [74,97,32,116,118,111,105,32,114,97,98,111,116,110,105,107,33]。
更糟的是,如果您使用的字符超出了ASCII:
?-短语((“Ятвой”,(“слуга” |“работник”),“!”),Satz)。
Satz = [1071,32,1090,1074,1086,1081,32,1089,1083,1091,1075,1072,33];
Satz = [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中的默认值,它使用双引号表示法以更紧凑的方式显示它们,以便打印任何一个字符的原子列表。对于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).