Подтвердить что ты не робот

В чем разница между "и" в Prolog?

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

4b9b3361

Ответ 1

Одиночные цитируемые элементы всегда являются атомами.

Значение двойных кавычек зависит от флага Пролога double_quotes:


atom — с этим значением "a" = a. В настоящее время это редко используется. Но вы найдете книги Prolog, где написано ["abc.pl"].


codes — список кодов символов. Это часто по умолчанию, но это приводит к очень нечитаемым ответам, например

?- set_prolog_flag(double_quotes,codes).
true.

?- phrase(("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:

?- phrase(("Я твой ",("слуга"|"работник"),"!"), 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 — список атомов char. Подробнее об этом.

?- set_prolog_flag(double_quotes,chars).
true.

?- phrase(("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,!].

?- phrase(("Я твой ",("слуга"|"работник"),"!"), Satz).
Satz = ['Я',' ',т,в,о,й,' ',с,л,у,г,а,!] ;
Satz = ['Я',' ',т,в,о,й,' ',р,а,б,о,т,н,и,к,!].

Это обозначение дает более читаемые ответы. Это может быть даже более компактно отображаться, поскольку нотация двойной кавычки может быть использована для печати любого списка из одних char атомов. Существует library(double_quotes) для SICStus и SWI.

<Предварительно > ? - use_module (library (double_quotes)). правда. ? - фраза (( "Я твой", ( "слуга" | "рабочий" ), "!" ), Сац). Satz = "Я твой слюга!"; Сац = "Я твой рабочий!". ? - фраза (( "Я твой", ( "слуга" | "работник" ), "!" ), Satz). Satz = "Я твой слуга!" ; Satz = "Я твой работник!".

Если вам трудно установить double_quotes.pl в качестве библиотеки, просто поместите его в каталог других файлов Prolog и скажите: use_module(double_quotes).

Ответ 2

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

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

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