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

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

Жанры

Неизвестно

Шрифт:

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– файл термов. Определите процедуру

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

Поворот Колеса

Уильямс Тэд
4. Орден Манускрипта
Фантастика:
фэнтези
7.33
рейтинг книги
Поворот Колеса

Изгнание

Фейхтвангер Лион
Проза:
проза прочее
6.25
рейтинг книги
Изгнание

Язык программирования Си. Издание 3-е, исправленное

Ритчи Деннис М.
Компьютеры и Интернет:
программирование
5.00
рейтинг книги
Язык программирования Си. Издание 3-е, исправленное

Мировая кабала. Ограбление по…

Катасонов Валентин Юрьевич
1. Иго иудейское
Документальная литература:
публицистика
8.85
рейтинг книги
Мировая кабала. Ограбление по…

Пушкарь. Пенталогия

Корчевский Юрий Григорьевич
Фантастика:
альтернативная история
8.11
рейтинг книги
Пушкарь. Пенталогия

Господин из завтра. Тетралогия.

Махров Алексей
Фантастика:
альтернативная история
8.32
рейтинг книги
Господин из завтра. Тетралогия.

Последний реанорец. Том IV

Павлов Вел
3. Высшая Речь
Фантастика:
фэнтези
5.20
рейтинг книги
Последний реанорец. Том IV

Весь цикл «Десантник на престоле». Шесть книг

Ланцов Михаил Алексеевич
Десантник на престоле
Фантастика:
альтернативная история
8.38
рейтинг книги
Весь цикл «Десантник на престоле». Шесть книг

Волкодав

Семёнова Мария Васильевна
1. Волкодав
Фантастика:
фэнтези
героическая фантастика
9.46
рейтинг книги
Волкодав

На границе империй. Том 10. Часть 10

INDIGO
Вселенная EVE Online
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 10

На Берлин!

Дорничев Дмитрий
2. Моё пространственное убежище
Фантастика:
фэнтези
боевая фантастика
рпг
постапокалипсис
5.56
рейтинг книги
На Берлин!

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

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

Эммануэль

Арсан Эммануэль
1. Эммануэль
Любовные романы:
эро литература
7.38
рейтинг книги
Эммануэль

Вечный. Книга III

Рокотов Алексей
3. Вечный
Фантастика:
фэнтези
попаданцы
рпг
5.25
рейтинг книги
Вечный. Книга III