
- •27.Управление программой. Внутренние подпрограммы унификации Пролога.
- •28.Структура программ на Прологе. Предикаты и утверждения.
- •29.Арифметика в Прологе.
- •30.Программирование повторяющихся операций. Повторение и откат.
- •31.Методы повторения. Методы организации рекурсии.
- •32.Списки в Прологе. Применение списков в программе.
- •33.Использование метода с разделением списка на голову и хвост. Компоновка данных в список.
- •34.Присваивание переменным строковых значений. Конкатенация строк. Преобразование данных.
- •35.Создание символьных префиксов. Преобразование строк в список символов.
- •36.Специальные строки Пролога.
- •37.Формирование атомов из строк.
- •38.Преобразование строк в списки атомов с функторами.
- •39.Предикаты Пролога для работы с файлами. Использование предикатов для работы с файлами.
38.Преобразование строк в списки атомов с функторами.
Часто удобно преобразовывать данные, введенные с клавиатуры, в термы, которые могут быть обработаны Турбо-Прологом. Например, вам может потребоваться поместить множество утверждений в базу данных в следующем виде:
fruit(apple).
fruit(peach).
fruit(orange).
fruit(pear).
Эти утверждения могут быть построены на основе строки apple peach orange pear. Этот метод включает преобразование строки в список, который содержит имя функтора. В данном случае имя функтора есть fruit (фрукт). Результатом преобразования является следующий список:
[fruit(apple),fruit(peach),fruit(orange),fruit(pear)].
Этот список может быть записан в базу данных (или файл). Соответствующее правило на Турбо-Прологе может быть построено таким образом, чтобы каждый элемент этого списка находился на отдельной строке. Это правило должно присоединять точку к каждому элементу с функтором.
После построения правила для записи списка необходимо построить правило преобразования. Предикат fronttoken является основной компонентой этого правила. Для соответствующего примера будет использоваться transf.
Это правило должно удовлетворять нескольким требованиям. Во-первых, оно должно отображать пустую строку в пустой список:
transf("", []).
В начальный момент преобразования это правило должно быть
успешным при пустом списке. Цель этого правила состоит в трансформации строки в список. Во время этого процесса правило также проверяет тип каждого элемента. Если элемент является целым числом, то выбирается имя функтора n; если элемент является символом, то имя функтора есть ch; если элемент является строкой, то имя функтора s. Целиком это рекурсивное правило имеет следующий вид:
transf(Str, [Token_head|Token_tail]) :-
fronttoken(Str, Symbol_type, Strx),
choose_token(Symbol_type, Token_head),
transf(Strx, Token_tail).
39.Предикаты Пролога для работы с файлами. Использование предикатов для работы с файлами.
В системе Турбо-Пролог имеются следующие предикаты для работы с файлами:
deletefile уничтожение файла
save сохранение файла на диске
renamefile переименование файла
existfile тест на наличие файла с данным именем
flush сброс данных из внутреннего буфера
disk выбор дисковода и пути доступа
dir выдача каталога директории
openwrite(datafile1,"FILE1.DAT") открытие файла
existfile("FILE1.DAT") проверка наличия файла
writedevice(datafile1) назначение в качестве устройства записи
closefile(datafile) закрытие файла
openread(datafile1,"FILE1.DAT") чтение из файла
readdevice(datafile1) назначение файла устройством чтения
closefile(datafile1) закрытие файла
Правило для печати выходных данных использует метод отката после неуспеха (ОПН).
write_lines :-
data(Line),
write(" ",Line),nl,
writedevice(datafile),
write(" ",Line),nl,
writedevice(screen),
fail.
write_lines.
Основным звеном программы является правило чтения и вывода данных на экран дисплея.
read_write_lines :-
readdevice(datafile),
not(eof(datafile)),
readln(line),
writedevice(screen),
write(" ",Line),nl,
read_write_lines.
read_write_lines.