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

на главную

Жанры

Программирование на языке Пролог для искусственного интеллекта

Братко Иван

Шрифт:

вывсемью( F)

с помощью которой это достигается, приведена на рис. 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
, содержащий всю информацию о том, что поставляет Гаррисон, тогда мы применим процедуру
создатьфайл
следующим образом:

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

 see( user), tell( user).

Процедуру

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

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

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

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

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

 read( Изделие),

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

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

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

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

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

 write( '.'), nl,

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

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

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

Обратите внимание на то, что

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

Упражнения

6.1. Пусть

f
 — файл термов. Определите процедуру

найтитерм( Терм)

которая выводит на терминал новый терм из

f
, сопоставимый с
Терм
'ом.

6.2. Пусть

f
 — файл термов. Напишите процедуру

найтивсетермы( Терм)

которая выводит на экран все термы из

f
, сопоставимые с
Tepм
'ом. Обеспечьте при этом, чтобы во время поиска
Терм
не конкретизировался (это могло бы помешать ему сопоставиться с другими термами дальше по файлу).

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

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

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

Последняя Арена 4

Греков Сергей
4. Последняя Арена
Фантастика:
рпг
постапокалипсис
5.00
рейтинг книги
Последняя Арена 4

Маяк надежды

Кас Маркус
5. Артефактор
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Маяк надежды

Великий перелом

Ланцов Михаил Алексеевич
2. Фрунзе
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Великий перелом

Сопротивляйся мне

Вечная Ольга
3. Порочная власть
Любовные романы:
современные любовные романы
эро литература
6.00
рейтинг книги
Сопротивляйся мне

Инквизитор Тьмы 2

Шмаков Алексей Семенович
2. Инквизитор Тьмы
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Инквизитор Тьмы 2

Мастер Разума V

Кронос Александр
5. Мастер Разума
Фантастика:
городское фэнтези
попаданцы
5.00
рейтинг книги
Мастер Разума V

Бандит 2

Щепетнов Евгений Владимирович
2. Петр Синельников
Фантастика:
боевая фантастика
5.73
рейтинг книги
Бандит 2

Истребители. Трилогия

Поселягин Владимир Геннадьевич
Фантастика:
альтернативная история
7.30
рейтинг книги
Истребители. Трилогия

Гардемарин Ее Величества. Инкарнация

Уленгов Юрий
1. Гардемарин ее величества
Фантастика:
городское фэнтези
попаданцы
альтернативная история
аниме
фантастика: прочее
5.00
рейтинг книги
Гардемарин Ее Величества. Инкарнация

Падение Твердыни

Распопов Дмитрий Викторович
6. Венецианский купец
Фантастика:
попаданцы
альтернативная история
5.33
рейтинг книги
Падение Твердыни

"Дальние горизонты. Дух". Компиляция. Книги 1-25

Усманов Хайдарали
Собрание сочинений
Фантастика:
фэнтези
боевая фантастика
попаданцы
5.00
рейтинг книги
Дальние горизонты. Дух. Компиляция. Книги 1-25

Ох уж этот Мин Джин Хо 2

Кронос Александр
2. Мин Джин Хо
Фантастика:
попаданцы
5.00
рейтинг книги
Ох уж этот Мин Джин Хо 2

Энфис 6

Кронос Александр
6. Эрра
Фантастика:
героическая фантастика
рпг
аниме
5.00
рейтинг книги
Энфис 6