с помощью которой это достигается, приведена на рис. 6.3.
вывсемью( семья ( Муж, Жена, Дети) :-
nl, write( родители), nl, nl,
вывчленсемьи( Муж), nl,
вывчленсемьи( Жена), nl, nl,
write( дети), nl, nl,
вывчленсемьи( Дети).
вывчленсемьи( членсемьи( Имя, Фамилия, дата( Д,
М, Г), Работа) ) :-
tab(4), write( Имя),
tab(1), write( Фамилия),
write( ', дата рождения'),
write( Д), tab( 1),
write( M), tab( 1),
write( Г), write( ','),
вывработу( Работа).
вывсписчлсемьи( []).
вывсписчлсемьи( [P | L]) :-
вывчленсемьи( P), nl,
вывсписчлсемьи( L).
вывработу( неработает) :-
write( неработает).
вывработу( работает Место, Оклад) ) :-
write(' работает '), write( Место),
write( ', оклад '), write( Оклад).
Рис. 6.3. Программа, обеспечивающая вывод в формате, представленном на рис. 6.2.
6.2.4. Обработка произвольного файла термов
Типичная последовательность целей для обработки файла 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
, содержащий всю информацию о том, что поставляет Гаррисон, тогда мы применим процедуру