Программирование на языке Пролог | страница 88
остаток_предложения (Сл,_,П):- последнее_слово (Сл),!.
остаток_предложения(Сл,С,[Сл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.
5.4. Чтение файлов и запись в файлы
Предикаты, обсуждавшиеся в этой главе ранее, использовались для ввода (чтения) и вывода (записи) данных при обмене лишь с терминалом, но они могут быть использованы и в более общих ситуациях. В Пролог-системе определяется текущий входной поток данных, из которого производится чтение всех вводимых данных. Все выводимые данные записываются в текущий выходной поток данных. В обычном состоянии текущий входной поток данных поступает с клавиатуры терминала, а текущий выходной поток данных направляется на дисплей терминала. Часто оказывается удобно выполнять операции чтения и записи данных над файлами, которые представляют последовательность литер во вторичной внешней памяти. Конкретный вид этой памяти зависит от используемой ЭВМ, но сейчас файлы обычно хранятся на магнитных дисках. Предполагается, что каждый файл имеет собственное имя(имя файла), используемое для идентификации файла. Для того чтобы содержание этой главы было понятно, читателю следует познакомиться с правилами организации и способом задания имен файлов в той операционной обстановке, в которой он работает. В Прологе имена файлов представляются атомами, но мы не можем исключить возможность каких-либо ограничений на синтаксис имен файлов, накладываемых конкретной обстановкой, в которой работает Пролог-система.