Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metodich.doc
Скачиваний:
5
Добавлен:
06.12.2018
Размер:
348.16 Кб
Скачать

2. Структуры. Состав логических операций в Прологе. Решение логической задачи в tp.

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

domains

articles = book(title,author);

horse(name); boat;

bankbook (balance)

title,author,name = symbol

balance = real

predicates

owns(name,articles)

clauses

owns(john,book("A friend of...","Irwin Shaw")).

owns(john,horse(blacky)). /*лошадь*/

owns(john,boat). /*лодка*/

owns(john,bankbook(1000)). /*банковская книжка*/

В описанном ниже примере приводится вариант использования вложенных структур для вывода на печать дерева данных:

Пример:

domains

treetype = tree(string, treetype, treetype) ; empty()

predicates

print_all_elements(treetype)

clauses

print_all_elements(empty).

print_all_elements(tree(X, Y, Z)) :-

write(X), nl,

print_all_elements(Y),

print_all_elements(Z).

goal

print_all_elements(tree("Cathy",

tree("Michael",

tree("Charles", empty, empty),

tree("Hazel", empty, empty)),

tree("Melody",

tree("Jim", empty, empty),

tree("Eleanor", empty, empty)))).

В Прологе существует встроенный предикат '=' равенство. Когда делается попытка доказать согласованность с базой данных целевого утверждения ? - X=Y, Пролог пытается установить соответствие между X и Y. При этом целевое утверждение доказуемо, если такое соответствие имеется.

Для того, чтобы указать, что объекты различны, используется символ "<>". Например, Y<>X означает “Y не равно X”. Кроме этого, в Прологе существуют встроенные предикаты, позволяющие сравнивать числа: <, >,<=,>=.

Пролог-системы обеспечивают выполнение следующих операций: X+Y, X-Y, X*Y, X/Y, X mod Y (остаток от деления X на Y).

Рассмотрим реализацию простейших логических задач на языке Пролог.

Пример №1. На одном заводе работали три друга: слесарь, токарь и сварщик. Их фамилии Борисов, Иванов и Семенов. У слесаря нет ни братьев, ни сестер. Он самый младший из друзей. Семенов, женатый на сестре Борисова, старше токаря. Назовите фамилии слесаря, токаря и сварщика. (Ответ: Семенов - сварщик, Борисов - токарь, Иванов - слесарь). Программа имеет вид:

predicates

prof (symbol) /*профессия*/

not_sister (symbol) /*наличие сестры*/

ml (symbol,symbol) /*отношение младше*/

st (symbol,symbol) /*отношение старше*/

all (symbol,symbol,symbol) /*кто есть кто*/

clauses

prof(slesar).

prof(tokar).

prof(svarschik).

not_sister(slesar).

ml(slesar,_).

st (P1,P2):- not(ml(P1,P2)), P1<>P2.

all (Borisov,Ivanov,Semenov):-

prof(Borisov),

prof(Ivanov),

prof(Semenov),

Borisov<>Ivanov,

Borisov<>Semenov,

Ivanov<>Semenov,

st(Sermenov,tokar),

not (not_sister(Borisov)).

goal all (Borisov,Ivanov,Semenov).

Пример №2 . В соревнованиях по бегу участвовали 4 студента: Андрей, Борис, Вася, Гриша. На вопрос, какое каждый из них занял место, они дали следующие ответы:

Андрей: “Я был вторым, Боря – третьим.”

Вася: “Я был вторым, Андрей – первым.”

Гриша: “Я был вторым, Боря - четвертым.”

Определить, какое место занял каждый из них, если известно, что в каждом из ответов одно утверждение верное, а другое - ложное. (Ответ: Андрей - 1, Гриша - 2, Боря - 3, Вася – 4.) Программа имеет вид:

domains

Name=symbol

Nomer=integer

predicates

Boyname(name). /*имя мальчика*/

Andysay(name,name). /*что сказал Андрей*/

Vasasay(name,name). /*что сказал Вася*/

Grishasay(name,name). /*что сказал Гриша*/

Writelistboy. /*целевой предикат*/

Cheking(name,name,name,name).

goal

Writelistboy.

clauses

Boyname("Andy").

Boyname("Vasa").

Boyname("Grisha").

Boyname("Boris").

Andysay(X,Y):-

X="Andy",Y<>"Boris":

X<>"Andy",Y="Boris".

Vasasay(X,Y):-

X="Vasa",Y<>"Andy":

X<>"Vasa",Y="Andy".

Grishasay(X,Y):-

X="Grisha",Y<>"Boris":

X<>"Grisha",Y="Boris".

Writelistboy:-

Boyname(A).

Boyname(B).

A<>B,

Boyname(C).

A<>C,

B<>C,

Boyname(D).

A<>D.

B<>D.

C<>D.

Cheking(A,B,C,D).

Cheking(A,B,C,D):-

Andysay(B,C),

Vasasay(B,A),

Grishasay(B,D),

Write ("Решением данной задачи будет :"),nl,

Write(A),Write(" "),

Write(B),Write(" "),

Write(C),Write(" "),

Write(D),Write(" "),nl,

Write("Нажмите любую клавишу."),nl,

Readchar(E).

Упражнения: Реализовать в среде Турбо-Пролог следующие логические задачи:

1.Петя, Гена, Дима и Вова занимаются в детской спортивной школе в разных секциях: гимнастической, баскетбольной, волейбольной и лёгкой атлетики. Петя, Дима и волейболист занимаются в одном классе. Петя и Гена на тренировки ходят пешком вместе, а гимназист ездит на автобусе. Легкоатлет не знаком ни с баскетболистом, ни с – волейболистом. Определить, кто в какой секции занимается.

2.В семье трое детей. Тоне вдвое больше лет, чем будет Гале тогда, когда Жене исполнится столько же лет, сколько Тоне сейчас. Определить, кто из них самый старший, кто самый младший, кто средний по возрасту.

3.Три мальчика нашли в море старинный сосуд – амфору. Один сказал, что амфору изготовили финикийцы в 5 в. до н. э., второй сказал, что её изготовили греки в 3 в. до н. э., а третий сказал, что она не греческая, а изготовлена в 4 в до н.э. Учитель оглядел амфору и сказал, что каждый из прав только на половину, т.е. у каждого мальчика одно утверждение верное, а другое – ложное. Требуется узнать в каком веке и каким народом изготовлена амфора.

4.Четверо друзей – Алексей Иванович, Фёдор семёнович, Валентин Петрович и Григорий Аркадьевич пошли с детьми в парк. В парке они решили прокатиться на “колесе обозрения”. В кабинах “колеса обозрения” оказались вместе: Алексей Иванович с Лёней, Андрей с отцом Коли, Тима с отцом Андрея, Фёдор Семёнович с сыном Валентина Петровича, Валентин Петрович с сыном Алексея Ивановича. Определить кто является чьим сыном.

5.Мальчики Лёня, Дима, Коля и Алик пошли ловить рыбу. Алик поймал рыбы больше чем Коля. Леня и Дима поймали столько же, сколько Коля и Алик. Лёня и Алик поймали меньше, чем Коля и Дима. Распределить места по количеству улова.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]