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

******

*****

Процедуру диагр можно определить так:

диагр( [N | L]) :-

 звездочки( N), nl,

 диагр( L).

звеэдочки( N) :-

 N > 0,

 write( *),

 N1 is N - 1,

 звездочки( N1).

звездочки( N) :-

 N =< 80.

<p>6.2.3. Формирование термов</p>

Предположим, наша программа имеет дело с семьями, которые представлены в виде термов так, как это сделано в гл. 4 (рис. 4.1). Тогда, если, переменная F конкретизирована термом, изображенный на рис. 4.1, то цель

write( F)

вызовет вывод этого терма в стандартной форме примерно так:

семья( членсемьи( том, фокс, дата( 7, май, 1950),

 работает( bbс, 15200)),

 членсемьи( энн, фокс, дата( 9, май, 1951),

  неработает),

 [членсемьи( пат, фокс, дата( 5, май, 1973),

   неработает),

  членсемьи( джим, фокс, дата( 5, май, 1973),

   неработает)])

родители

 том фокс, датарожд 7 май 1950, работает bbс,

  оклад 15200

 энн фокс, датарожд 9 май 1951, неработает

дети

 пат фокс, датарожд 5 май 1973, неработает

 джим фокс, датарожд 5 май 1973, неработает

Рис. 6.2. Улучшенный формат вывода термов, представляющих семью.

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

вывсемью( 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.

<p>6.2.4. Обработка произвольного файла термов</p>

Типичная последовательность целей для обработки файла 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С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных