Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Задание 5. 3




Напишите программу сортировки числового списка методом "пузырька".

6. МОДИФИКАЦИЯ УТВЕРЖДЕНИЙ ПРОГРАММЫ.
РАБОТА С БАЗОЙ ДАННЫХ.

ЦЕЛЬ. Научиться работать с динамическими базами знаний.

 

Встроенные предикаты asserta/1 и assert/1 позволяют добовлять

новые утверждения в базу данных Пролога (в начало и в конец

соответственно), а retract/1 - удалять утверждение, заголовок

которого унифицируется с аргументом. Например, можно составить запрос, который опрашивает пользователя о знании языков:

язык(итальянский).

язык(немецкий).

язык(японский).

язык(французский).

язык(английский).

 

?- write('Введите Ваше имя '),

read(Имя),

язык(Яз),

write('Знаете ли Вы '), write(Яз),

write(' язык'),nl,

read(да),

assert(владеет(Имя,Яз)),fail.

Часто используется предикат retractall/1, удаляющий из базы данных все предложения, заголовки которых унифицируются с аргументом.

Рассмотрим пример базы данных, содержащей информацию, относящуюся к членам клуба: фамилию и возраст, размер членского взноса, а также данные о том, уплачен ли взнос. Такие данные будут представлены в базе фактами, после добавления их командой пополнить_состав(член(…)) (см. ниже в заданиях):

%член(_Фамилия,_Возраст,_Данные_об_уплате)

:-dynamic(член/3).

член('Иванов',15,уплачено).

член('Иванов',33,не_уплачено).

член('Хромов',40,не_уплачено).

Конструкция:-dynamic(член/3) необходима для того, чтобы возможно было изменять базу фактов, связанную с предикатом член/3 с помощью предиката assert во время выполнения. Для безвозвратной отмены действия предиката dynamic используют предикат compile_predicates(List_of_nameArity). После использования этого предиката факты указанные в аргументе не могут быть изменены динамически до конца программы (пример использования: compile_predicates(член/3)).

Размер взноса не указывается, он определяется по возрасту:

 

взнос(Возраст,рублей(1)):-Возраст<18.

взнос(Возраст,рублей(2)):-Возраст>=18.

 

Рассмотрим некоторые операции над базой данных.Внести сведения о новом члене организации:

 

пополнить_состав(Член):-assert(Член).

 

Выдать на терминал сведения о членстве в организации:

выдать_сведения(член(Фамилия,Возраст,Данные_об_уплате)):-

член(Фамилия,Возраст,Данные_об_уплате),

взнос(Возраст,Сумма),

write(член(Фамилия,Возраст,Сумма,Данные_об_уплате)),nl,fail.

выдать_сведения(_).

 

Удалить сведения о членах организации:

 

сократить_состав(Член):-retractall(Член).

Внести данные о том, что член организации уплатил членский взнос:

 

запись_об_уплате(член(Фамилия,Возраст)):-

retract(член(Фамилия,Возраст,не_уплачено)),

assert(член(Фамилия,Возраст,уплачено)).

 





Поделиться с друзьями:


Дата добавления: 2015-10-01; Мы поможем в написании ваших работ!; просмотров: 414 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Что разум человека может постигнуть и во что он может поверить, того он способен достичь © Наполеон Хилл
==> читать все изречения...

2510 - | 2325 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.011 с.