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

6.8 Логічне програмування

Логічне програмування ґрунтується на правилах логічного виведення. Математичною моделлю тут є вирахування предикатів.

У найбільш відомій мові логічного програмування Prolog аксіоми називають фактами, а правила виведення обмежені хорнівськими виразами (диз’юнктами Хорна).

Хорнівський вираз містить не більше одного позитивного літерала, тобто може бути записаний у формі

a b1 b2 ... bn .

Цей вираз можна переписати у формі імплікації

a ← b1 b2 ... bn .

Тут використані еквівалентності

(P Q) ≡ ( P → Q)

(P Q) ≡ ( P Q)

Програма на мові Prolog складається з фактів

a ← , a ← ,

і правил вигляду a ← b1 ... bn .

При цьому операція (і) позначається в програмі “,” , (або) – “;”, а операція ← (тільки якщо) позначається “ :- ”.

Наведемо коротку інструкцію для роботи з Турбо-Прологом 2.0.

Функціональні клавіші:

F9 - Compile , Alt-R - Run

F10 - покрокове трасування.

Стандартні області (типи даних): char, наприклад 'а'; string, наприклад “text”; integer; real; symbol – послідовність з букв і цифр, що починається з букви.

Приклади програм

Програма 1 Реалізація сімейних відношень

predicates

male(symbol)

female(symbol)

father(symbol,symbol)

mother(symbol,symbol)

parent(symbol,symbol)

sister(symbol,symbol)

brother(symbol,symbol)

grandfather(symbol,symbol)

clauses

male(alan).

male(charles).

male(bob).

male(ivan).

female(beverly).

female(fay).

female(merilyn).

female(sally).

mother(marilyn,beverly).

mother(alan,sally).

father(alan,bob).

father(beverly,charles).

father(fay,bob).

father(marilyn,alan).

parent(X,Y):-mother(X,Y);father(X,Y).

brother(X,Y):-male(Y),parent(X,P), parent(Y,P),X<>Y.

sister(X,Y):-female(Y),parent(X,P),parent(Y,P),X<>Y.

grandfather(X,G):-father(P,G),mother(X,P).

grandfather(X,G):-father(X,P),father(P,G).

Варіанти розв’язків:

goal: brother(alan,ivan) No

goal: grandfather(marilyn,I) I=charles I=bob 2 solutions

Програма 2 Перевірка наявності маршруту для шахматного коня на дошці 3 × 3 з полями:

a1, a2, a3,

a4, a5, a6,

a7, a8, a9.

predicates

been(symbol)

move(symbol,symbol)

path(symbol,symbol)

clauses

been(a3).

move(a1,a6).move(a3,a4).move(a6,a7).move(a8,a3).

move(a1,a8).move(a3,a8).move(a6,a1).move(a8,a1).

move(a2,a7).move(a4,a3).move(a7,a6).move(a9,a4).

move(a2,a9).move(a4,a9).move(a7,a2).move(a9,a2).

path(Z,Z).

path(X,Y) :- move(X,W), not(been(W)),

assert(been(W)), path(W,Y).

Приклад виконання завдання. Мовою Prolog написати програму з такими фактами, правилами і цілями:

Факти: трикутник A має кути – 30, 60, 90,

трикутник B має кути – 20, 80, 80.

Правило: трикутник є рівнобедреним, якщо два його кути однакові.

Мета: чи є трикутники A і B рівнобедреними ?

Запис правил і фактів мовою Пролог може мати вигляд:

predicates

tre (symbol, integer, integer, integer)

rb (symbol)

clauses

tre (a, 30, 60, 90).

tre (b, 20, 80, 80).

rb (V) :- tre (V, X, Y, _), X=Y .

rb (V) :- tre (V, _, Y, Z), Y=Z .

rb (V) :- tre (V, X, _, Z), X=Z .

Цілі записуються у вигляді rb(a), rb(b).

Завдання до розділу 6

1 Мовою Lisp описати і застосувати функцію, що обчислює один з коренів квадратного рівняння.

2 Мовою Lisp описати і застосувати функцію, що обчислює площу трикутника за відомими довжинами сторін.

3 Мовою Lisp описати і застосувати функцію, що обчислює площу трапеції за відомими основами і висотою.

4 Мовою Lisp описати і застосувати функцію, що обчислює площу круга за відомим діаметром.

5 Мовою Lisp описати і застосувати функцію, що обчислює площу круга за відомим радіусом.

6 Мовою Lisp описати і застосувати функцію, що обчислює об’єм кулі за відомим радіусом.

7 Мовою Lisp описати і застосувати функцію, що обчислює відстань від довільної точки на площині до точки з координатами (2,3).

8 Мовою Prolog написати програму з такими фактами, правилами і цілями:

Факти: a - син b;

b - син c.

Правило: x - онук z, якщо x - син y і y – син z.

Мета: чи є a онуком c ?

9 Мовою Prolog написати програму з такими фактами, правилами і цілями:

Факт: a - чоловік b.

Правило: x - дружина y, якщо y – чоловік x.

Мета: чи є b дружиною a ?

10 Мовою Prolog написати програму з такими фактами, правилами і цілями:

Факти: a – позитивне;

b – негативне.

Правило: добуток xy позитивний, якщо x і y – обоє позитивні або обоє негативні.

Мета: чи є ab позитивним ?

11 Мовою Prolog написати програму з такими правилами і цілями:

Правило: добуток xy позитивний, якщо x>0, y>0 або x<0, y<0.

Мета: чи є добуток (-1) і (-5) позитивним ?

12 Мовою Prolog написати програму з такими фактами, правилами і цілями:

Факти: a – поле класу c ;

b – метод класу d .

Правило: x – є членом класу y, якщо x – поле y або x – метод y.

Мета: чи є a членом класу d ?

13 Мовою Prolog написати програму з такими фактами, правилами і цілями:

Факти: трикутник A має кути – 60, 60, 60;

трикутник B має кути – 45, 45, 90.

Правило: трикутник є прямокутним, якщо один з його кутів дорівнює 90 градусам.

Мета: чи є трикутники A і B прямокутними ?

14 Мовою Prolog написати програму з такими фактами, правилами і цілями:

Факти: трикутник A має кути – 60, 60, 60;

трикутник B має кути – 45, 45, 90.

Правило: трикутник є рівностороннім, якщо всі кути рівні.

Мета: чи є трикутники A і B рівносторонніми ?

151

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