Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ввод-вывод SWI Prolog, Как правильно ввести строку? 
V
    Опции темы
dodikk
Дата 20.12.2008, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 9.10.2008

Репутация: нет
Всего: нет



Подскажите пожалуйста, как правильно ввести символьную строку из консоли в 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').

Спасибо.
PM MAIL   Вверх
dodikk
Дата 21.12.2008, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 9.10.2008

Репутация: нет
Всего: нет



Помоги себе сам получается.
Сломал себе половину мозга, пока нашел, в чем дело.


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

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`.


Иначе не работает.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума Prolog
Void
  • Пожалуйста, создавайте темы с содержательными названиями.
  • Уважаемые учащиеся, здесь всегда рады помочь Вам, но не делать за Вас вашу работу. У вас гораздо больше шансов получить помощь, если Вы приложите усилия и поделитесь с нами проблемами и результатами. В противном случае добро пожаловать в раздел Центр Помощи.
  • Получив ответ на интересующий Вас вопрос, не забудьте пометить его как решённый.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Void.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Prolog | Следующая тема »


 




[ Время генерации скрипта: 0.0968 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.