Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
пролог бомбы часть 1 (27-39).doc
Скачиваний:
4
Добавлен:
26.09.2019
Размер:
120.32 Кб
Скачать

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.

8