Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Обработка произвольного файла термов



Типичная последовательность целей для обработки файла F от начала до конца будет выглядеть примерно так:

..., see(F), обработкафайла, sеe(user),...

Здесь обработкафайла — процедура, которая читает и обрабатывает последовательно каждый терм файла F один за другим до тех пор, пока не встретится конец файла. Приведем типичную схему для процедуры обработкафайла:

обработкафайла:-

read(Терм),

обработка(Терм).

обработка(end_of_file):-!.

% Все сделано

обработка(Терм):-

обраб(Терм),

% Обработать текущий элемент

обработкафайла.

% Обработать оставшуюся часть файла

Здесь обраб(Терм) представляет процедуру обработки отдельного терма. В качестве примера такой обработки рассмотрим процедуру, которая выдает на терминал каждый терм вместе с его порядковым номером. Назовем эту процедуру показфайла. У нее должен быть дополнительный аргумент для подсчета прочитанных термов:

показфайла(N):-

read(Терм),

показ(Терм, N).

показ(Терм, N):-!

write(N), tab(2), write(Терм),

N1 is N + 1,

показфайла(N1).

Вот другой пример программы обработки файлов, построенной по подобной схеме. Пусть есть файл с именем файл1, термы которого имеют форму

изделие(НомерИзд, Описание, Цена, ИмяПоставщика)

Каждый терм описывает одну строку каталога изделий. Нужно построить новый файл. содержащий только те изделия, которые выпускаются каким-то конкретным поставщиком. Поскольку поставщик в этом новом файле у всех изделий будет одинаков, его имя нужно записать только один раз в самом начале и убрать из всех остальных термов. Процедура будет называться

создатьфайл(Поставщик)

Например, если исходный каталог хранится в файле файл1, а мы хотим создать специальный каталог в файле файл2, содержащий всю информацию о том, что поставляет Гаррисон, тогда мы применим процедуру создатьфайл следующим образом:

?- seе(файл1), tеll(файл2), создатьфайл(гаррисон),

see(user), tell(user).

Процедуру создатьфайл можно определить так:

создатьфайл(Поставщик):-

write(Поставщик), write('.'), nl,

создатьостальное(Поставщик).

создатьостальное(Поставщик):-

read(Изделие),

обработать(Изделие, Поставщик).

обработать(end_ot_file):-!.

обработать(Изделие(Ном, Опис, Цена, Поставщик),

Поставщик):-!,

write(Изделие(Ном, Опис, Цена)),

write('.'), nl,

создатьостальное(Поставщик).

обработать (_, Поставщик):-

создатьостальное(Поставщик).

Обратите внимание на то, что обработать вписывает точки между термами, чтобы впоследствии файл мог быть прочитан процедурой read.





Дата публикования: 2015-10-09; Прочитано: 167 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...