В чем разница между "и" в прологе?
Я новичок в Прологе и заметил, что "и" дают другое поведение, но мне любопытно, почему. В частности, при загрузке файла, ?- ['test1.pl'].
работает, пока ?- ["test1.pl"].
не делает.
2 ответа
Одиночные кавычки - это всегда атомы.
Значение двойных кавычек зависит от флага Пролога double_quotes
:
atom
- с этим значением "a" = a
, В настоящее время это редко используется. Но вы найдете книги Пролог, где ["abc.pl"]
написано.
codes
- список кодов символов. Это часто используется по умолчанию, но это приводит к очень нечитаемым ответам, таким как
? - set_prolog_flag (двойные кавычки, коды). правда.?- фраза (("Я твой ",("Слуга"|"Работник"),"!"), Сац). 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 = [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,105,1080,1082,33].
chars
- список одноуглеродных атомов. Смотрите это для получения дополнительной информации.
? - set_prolog_flag (двойные кавычки, символы). правда.?- фраза (("Я твой ",("Слуга"|"Работник"),"!"), Сац). 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 = ['Я', '', т, в, о, й, '', р, а, б, о, т, н, и, к,!].
Эта запись дает более читаемые ответы. Это может быть даже более компактно отображено, так как двойная кавычка может использоваться для печати любого списка атомов с одним символом. Есть library(double_quotes)
для SICStus и SWI.
? - use_module (библиотека (double_quotes)). правда.?- фраза (("Я твой ",("Слуга"|"Работник"),"!"), Сац). Satz = "Ja tvoi sluga!"; Satz = "Я твои работники!"? - фраза (("Я твой ",("слуга"|"работник"),"!"), сатц). Satz = "Я твой слуга!"; Satz = "Я твой работник!".
Если у вас возникли трудности с установкой double_quotes.pl
в качестве библиотеки просто поместите ее в каталог других файлов Prolog и скажите: use_module(double_quotes).
Строки в Прологе пишутся в одинарных кавычках. Термины, написанные в двойных кавычках, немедленно преобразуются в список кодов символов.
?- write('sdf').
sdf
true.
?- write("sdf").
[115, 100, 102]
true.