我是 Prolog 的新手,注意到 ' 和 " 给出不同的行为,但很好奇为什么。具体来说,在加载文件时,?- ['test1.pl'].
有效,而?- ["test1.pl"].
无效。
问问题
7419 次
2 回答
47
单引号项目始终是原子。
双引号的含义取决于 Prolog 标志double_quotes
:
atom
— 用这个值"a" = a
。如今,这很少使用。但是你会发现 Prolog 的书籍是在哪里["abc.pl"]
写的。
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
— 单字符原子列表。有关更多信息,请参阅此内容。
?- 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,可以使用以下库进行模拟。
?-使用模块(库(双引号))。 真的。 ?-短语((“Ja tvoi”,(“sluga”|“rabotnik”),“!”),Satz)。 Satz = “Ja tvoi sluga!” ; Satz =“Ja tvoi rabotnik!”。 ?-短语((“Я твой”,(“слуга”|“работник”),“!”),Satz)。 Satz = "Я твой слуга!" ; Satz = "Я твой работник!"。
如果您在安装double_quotes.pl
为库时遇到困难,只需将其放入其他 Prolog 文件的目录并说:use_module(double_quotes).
于 2011-11-25T13:33:00.203 回答
10
Prolog 中的字符串用单引号书写。用双引号写的术语会立即转换为字符代码列表。
?- write('sdf').
sdf
true.
?- write("sdf").
[115, 100, 102]
true.
于 2011-11-25T04:18:10.030 回答