Одиночные кавычки всегда являются атомами.
Значение двойных кавычек зависит от флага Пролога double_quotes
:
atom
& mdash;
с этим значением "a" = a
. В настоящее время это редко используется. Но вы найдете книги по Прологу, где написано ["abc.pl"]
.
codes
& mdash;
список кодов символов. Часто это по умолчанию, но это приводит к очень нечитаемым ответам, таким как
?- <b>set_prolog_flag(double_quotes,codes).</b>
true.
?- <b>phrase(("Ja tvoi ",("sluga"|"rabotnik"),"!"), Satz).</b>
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:
?- <b>phrase(("Я твой ",("слуга"|"работник"),"!"), Satz).</b>
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
& Mdash; список атомов с одним символом. Подробнее об этом см. .
?- <b>set_prolog_flag(double_quotes,chars).</b>
true.
?- <b>phrase(("Ja tvoi ",("sluga"|"rabotnik"),"!"), Satz).</b>
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,!].
?- <b>phrase(("Я твой ",("слуга"|"работник"),"!"), Satz).</b>
Satz = ['Я',' ',т,в,о,й,' ',с,л,у,г,а,!] ;
Satz = ['Я',' ',т,в,о,й,' ',р,а,б,о,т,н,и,к,!].
Эта запись дает более читаемые ответы. Это может быть даже более компактно отображено, так как двойная кавычка может использоваться для печати любого списка атомов с одним символом Существует library(double_quotes)
для SICStus и SWI .
?- <b>use_module(library(double_quotes)).</b>
true.
?- <b>phrase(("Ja tvoi ",("sluga"|"rabotnik"),"!"), Satz).</b>
Satz = "Ja tvoi sluga!" ;
Satz = "Ja tvoi rabotnik!".
?- <b>phrase(("Я твой ",("слуга"|"работник"),"!"), Satz).</b>
<a href="http://www.youtube.com/watch?v=d_MFJwDThPg" rel="noreferrer">Satz = "Я твой слуга!"</a> ;
Satz = "Я твой работник!".
Если у вас возникли трудности с установкой double_quotes.pl
в виде библиотеки, просто поместите ее в каталог других файлов Prolog и скажите: use_module(double_quotes).