Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Prolog > Ввод-вывод SWI Prolog


Автор: dodikk 20.12.2008, 13:48
Подскажите пожалуйста, как правильно ввести символьную строку из консоли в SWI Prolog программу.

В мануале нашел предикат read/1, коим и пытался воспользоваться.
Он все прекрасно вводит, но не в виде строк, а в виде двоичного дампа.

Нашел в мануале следующее :
Цитата

String objects by default have no lexical representation and thus can only be created using the predicates below or through the foreign language interface (See chapter 9. There are two ways to make read/1 read text into strings, both controlled through Prolog flags.
One is by setting the double_quotes flag to string and the other is by setting the backquoted_string flag to true. In latter case, `Hello world` is read into a string and write_term/2 prints strings between back-quotes if quoted is true. This flag provides compatibility to LPA Prolog string handling. 



Попробовал оба способа. Во втором случае на консоль выводятся красивые строки, но я никак не могу заставить их работать со своими предикатами.
В первом случае на экран продолжает выводиться всякая фигня, а не строки.

Предикаты описаны следующим образом :
bordersOn('Country1', 'Country2').

Спасибо.

Автор: dodikk 21.12.2008, 12:46
Помоги себе сам получается.
Сломал себе половину мозга, пока нашел, в чем дело.


На самом деле после установки флагов :
Цитата

set_prolog_flag(double_quotes, string)
set_prolog_flag(backquoted_string, true).


Пролог в строку ничего не конвертирует. Просто предикат write/1 и прочие предикаты вывода "угадывают", что там строка и выводят ее красиво.
То есть, кроме установки флагов следовало еще изменить способ хранения предикатов. Описывать их следует следующим образом :
Цитата

bordersOn("Country1", "Country2').

Именно с двойными кавычками.

При вводе из консоли с помощью read/1, следует вводить строки, используя обратные кавычки : 
Цитата




Добавлено через 1 минуту и 1 секунду
При вводе из консоли с помощью read/1, следует вводить строки, используя обратные кавычки : 
Цитата

`User input`.


Иначе не работает.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)