Чтение онлайн

на главную - закладки

Жанры

Неизвестно

Шрифт:

write( ', дата рождения'),

write( Д), tab( 1),

write( M), tab( 1),

write( Г), write( ','),

вывработу( Работа).

вывсписчлсемьи( [ ]).

вывсписчлсемьи( [Р | L]) :-

вывчленсемьи( Р), 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( Терм),

Nl is N + 1,

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

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

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

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

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

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

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

see( user), tell( user).

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

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

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

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

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

read( Изделие),

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

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

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

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

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

write( '.'), nl,

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

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

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

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

Упражнения

6. 1. Пусть f– файл термов. Определите процедуру

Поделиться:
Популярные книги

Лейб-хирург

Дроздов Анатолий Федорович
2. Зауряд-врач
Фантастика:
альтернативная история
7.34
рейтинг книги
Лейб-хирург

Убивать чтобы жить 5

Бор Жорж
5. УЧЖ
Фантастика:
боевая фантастика
космическая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 5

Обрыв

Гончаров Иван Александрович
Проза:
классическая проза
русская классическая проза
8.93
рейтинг книги
Обрыв

Телохранитель Генсека. Том 1

Алмазный Петр
1. Медведев
Фантастика:
попаданцы
альтернативная история
7.00
рейтинг книги
Телохранитель Генсека. Том 1

Дважды одаренный. Том II

Тарс Элиан
2. Дважды одаренный
Фантастика:
городское фэнтези
альтернативная история
аниме
5.00
рейтинг книги
Дважды одаренный. Том II

Алые перья стрел

Крапивин Владислав Петрович
Детские:
детские приключения
8.58
рейтинг книги
Алые перья стрел

Андер Арес

Грехов Тимофей
1. Андер Арес
Фантастика:
рпг
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Андер Арес

Газлайтер. Том 26

Володин Григорий Григорьевич
26. История Телепата
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Газлайтер. Том 26

Инкарнатор

Прокофьев Роман Юрьевич
1. Стеллар
Фантастика:
боевая фантастика
рпг
7.30
рейтинг книги
Инкарнатор

Черный Маг Императора 17

Герда Александр
17. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Черный Маг Императора 17

Страж Тысячемирья

Земляной Андрей Борисович
5. Страж
Фантастика:
боевая фантастика
альтернативная история
фэнтези
5.00
рейтинг книги
Страж Тысячемирья

Газлайтер. Том 5

Володин Григорий
5. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 5

Назад в СССР 5

Дамиров Рафаэль
5. Курсант
Фантастика:
попаданцы
альтернативная история
6.64
рейтинг книги
Назад в СССР 5

Наследник для дона мафии

Тоцка Тала
2. Наследники мафии
Любовные романы:
остросюжетные любовные романы
эро литература
5.00
рейтинг книги
Наследник для дона мафии