В чем разница между "и" в прологе?

Я новичок в Прологе и заметил, что "и" дают другое поведение, но мне любопытно, почему. В частности, при загрузке файла, ?- ['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.
Другие вопросы по тегам