Почему клубничный пролог игнорирует пробелы - PullRequest
0 голосов
/ 21 мая 2018

Я использую Strawberry Prolog, и когда я пишу

?- write('Hello World'),nl.

, он выводит HelloWorld без пробелов, но если я заменяю одинарную кавычку на двойную, она выводит все нормально, почему это? И почему этоне проблема с другими IDE пролога? Также, почему есть разница между одинарными и двойными кавычками?

Наконец, если нет проблем, может кто-нибудь порекомендовать несколько руководств по прологу?

1 Ответ

0 голосов
/ 21 мая 2018

Хорошей контрольной точкой для того, что должна делать система Prolog, всегда является GNU Prolog (для некоторых проблем версия 1.3.0 еще лучше).Он очень близок к основному стандарту ISO и не имеет много новинок.Таким образом, вы должны получить кое-что:

GNU Prolog 1.4.4 (64 bits)
Compiled Apr 23 2013, 16:05:07 with cl

?- write('Hello World'), nl.  
Hello World

yes
?- write("Hello World"), nl.  
[72,101,108,108,111,32,87,111,114,108,100]

Объяснение 1 Одиночные кавычки:

Предикат write / 1 должен записывать атомы без кавычек.Это означает, что атомы, которые обычно нуждаются в кавычках, будут написаны без кавычек.Если вы хотите показать цитаты, вы можете использовать writeq / 1.А атом находится в одинарных кавычках.

Пояснение 2 Двойные кавычки:

Двойные кавычки традиционно использовались для обозначения списков кодов символов, так чтоможно легко определить правила DCG.Многие системы Prolog отвлекаются здесь, и даже основной стандарт ISO позволяет атомам символов вместо кодов.

Но обычно вы можете спросить систему Prolog, что она делает с двойными кавычками, и даже изменить поведение.Просто используйте флаг Prolog double_quotes.Вот что вы можете сделать в GNU-Prolog:

?- current_prolog_flag(double_quotes, X).  
X = codes

?- set_prolog_flag(double_quotes, chars).  
yes

?- write("Hello World"), nl.  
[H,e,l,l,o, ,W,o,r,l,d]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...