В чем разница между "и" в прологе? - PullRequest
41 голосов
/ 25 ноября 2011

Я новичок в Прологе и заметил, что 'и' дают другое поведение, но мне любопытно, почему. В частности, при загрузке файла ?- ['test1.pl']. работает, а ?- ["test1.pl"]. - нет.

Ответы [ 2 ]

36 голосов
/ 25 ноября 2011

Одиночные кавычки всегда являются атомами.

Значение двойных кавычек зависит от флага Пролога 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).

13 голосов
/ 25 ноября 2011

Строки в Прологе пишутся в одинарных кавычках.Термины, написанные в двойных кавычках, немедленно преобразуются в список кодов символов.

?- write('sdf').
sdf
true.

?- write("sdf").
[115, 100, 102]
true.
...