Читаем Программирование на языке пролог (ЛП) полностью

Как же программа ввестипреодолеет проблемы возврата при вводе? Ответ заключается в том, что программа конструируется таким образом, что она вводит литеры с опережением на одну литеру, а проверки литеры выполняются правилом, отличным от правила, в котором эта литера была прочитана. Если литера введена в каком-то месте программы и не может быть здесь же использована, то она возвращается обратно для возможного использования другими правилами. В соответствии со сказанным предикат для ввода одного слова читать_слово в действительности имеет три аргумента. Первый предназначен для литеры, которая была получена при последнем выполнении get0где-либо в программе, но которую оказалось невозможным использовать в месте ее получения. Второй предназначен для атома, который будет создан для прочитанного слова. Последний аргумент предназначен для литеры, следующей во вводимом предложении сразу за прочитанным словом. Для того чтобы определить, где кончается слово, необходимо ввести литеру, следующую непосредственно за словом. Эта литера должна быть сохранена, потому что она может оказаться первой литерой другого слова.

Здесь приведен текст программы:

/* Прочитать предложение */

ввести([Сл|Слс]):- get0(C), читать_слово(С,Сл,С1), остаток_предложения(Сл, С1, Слс).

/* Дано слово и литера после него, ввести остаток предложения */

остаток_предложения (Сл,_,П):- последнее_слово (Сл),!.

остаток_предложения(Сл,С,[Сл1|Слс]):- читать_слово(С, Сл, С1), остаток_предложения(Сл1,С1,Слс).

/* Ввести одно слово, имея начальную литеру и запомнив, какая литера идет после слова */

читать_слово(С,Сл,С1):- литера(С),!, name(Сл,С), get0(C1).

читать_слово(С,Сл,С2):- слово(С, Нс),!,get0(Cl),

остаток_слова(С1,Сс,С2),name(Сл,[Нс|Сс]).

читать_слово(С,Сл,С2):-get0(Cl), читать_слово (С1, Сл,С2).

остаток_слова(С,[Нс|Сс],С2):-слово(С,Нс),!,get0(Cl),остаток_слова (С1, Сс, С2 ).остаток_слова(С, [],С).

/* Эти литеры образуют отдельные слова */

литера(44) /*, */

литера(59) /*; */

литера(58) /*: */

литера(63) /*? */

литера(ЗЗ) /*! */

литера(46) /*. */

/* Следующие литеры могут встретиться внутри слова */

/* Второй факт для предиката словопреобразует прописные литеры в строчные

слово(С,С):- С › 96, С ‹ 123. /* a b… */

слово(С,М):- С › 64, С ‹ 91, M is С+ 32. /*А В… */

слово(С,С):- С › 47, С ‹ 58 /* 1 2… 9*/

слово(39,39). /* ' */

слово(45,45) /* – */

/* Следующие слова заканчивают предложение */

последнее_слово('.').

последнее_слово('!').

последнее_слово('?').

Упражнение 5.1.Объясните, для чего используется каждая переменная в приведенной программе.

Упражнение 5.2.Напишите программу, которая читает неограниченную последовательность литер и печатает ее, предварительно заменяя вхождения литеры алитерой b.

<p>5.4. Чтение файлов и запись в файлы</p>

Предикаты, обсуждавшиеся в этой главе ранее, использовались для ввода (чтения) и вывода (записи) данных при обмене лишь с терминалом, но они могут быть использованы и в более общих ситуациях. В Пролог-системе определяется текущий входной поток данных,из которого производится чтение всех вводимых данных. Все выводимые данные записываются в текущий выходной поток данных.В обычном состоянии текущий входной поток данных поступает с клавиатуры терминала, а текущий выходной поток данных направляется на дисплей терминала. Часто оказывается удобно выполнять операции чтения и записи данных над файлами,которые представляют последовательность литер во вторичной внешней памяти. Конкретный вид этой памяти зависит от используемой ЭВМ, но сейчас файлы обычно хранятся на магнитных дисках. Предполагается, что каждый файл имеет собственное имя(имя файла),используемое для идентификации файла. Для того чтобы содержание этой главы было понятно, читателю следует познакомиться с правилами организации и способом задания имен файлов в той операционной обстановке, в которой он работает. В Прологе имена файлов представляются атомами, но мы не можем исключить возможность каких-либо ограничений на синтаксис имен файлов, накладываемых конкретной обстановкой, в которой работает Пролог-система.

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных