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

5.6.Приклад, який ілюструє задання структури речення англійської мови.

Розглянемо приклад задання граматичної структури речення, використовуючи складний об'єкт. Найбільш просте речення має підмет і присудкову частину:

sentence = sentence(noun,verbphrase)

Де підмет є простим словом:

noun=noun(word),

а присудкова частина може мати або ж дієслово з пояснюючою частиною, або ж просто дієслово

verbphase=verbphrase(verb,noun);

verb(word)

verb = verb(word)

Використовуючи такий опис, речення 'Еllen owns the book.' може бути представлене

sentence(noun(ellen),verbphrase(verb(owns),noun(book)))

Відповідне дерево прийме вигляд

sentence

/ \

/ \

noun verbphrase

/ / \

/ verb noun

| | |

ellen owns the book

Подібний підхід може бути використаний при написанні блоку синтаксичного аналізу компілятора.

5.7.Опис змішаних складних об'єктів.

В цьому розділі ми розглянемо три різні типи опису доменів, які ви можете використовувати у ваших програмах. Ці описи дозволяють вам використовувати предикати, які:

мають аргумент , який може бути різного типу;

мають змінну кількість аргументів, кожний з яких окремого типу;

мають змінну кількість аргументів, деякі з яких можуть бути різного типу.

5.7.1.Аргументи, які можуть мати різний тип.

Для того, щоб дозволити предикату допустити аргументи різного типу, ви повинні додати опис функтору. Наприклад, в наступному прикладі фраза your_age, буде допускати аргумент типу age, який може бути стрічковим, цілим, дійсним.

predicates

your_age(age)

clauses

your_age(i(AGE)):-write(AGE)

your_age(r(AGE)):-write(AGE)

your_age(s(AGE)):-write(AGE)

тоді домен повинен бути наступним:

domains age = i(integer);

r(real);

s(string)

predicates your_age(age)

Поряд з тим Пролог не дозволяє наступні описи доменів:

domain

age = integer, real, string

5.7.2 Cписковий тип.

Припустимо, нам необхідно створити базу-довідник, в якій ми будемо зберігати дані про лекційні курси, які можуть читати професори. Її можна реалізувати наступною програмою:

predicates

teacher(symbol, symbol, symbol)

clauses

teacher(ed,willis,english).

teacher(ed,willis,math1).

teacher(ed,willis,hystory1).

teacher(mary,marker,english2).

teacher(mary,marker,math2).

teacher(cris,grim, geometry).

Тут в нас виникає необхідність повторювати прізвище для кожного предмету. Це марудно, тому краще використати тип списку. В наступному прикладі, аргумент classes, описаний як списковий тип.

domains

classes = symbol*

predicates teacher(symbol,symbol, classes)

clauses

teacher(ed, willis,[ english,math1, history1]).

teacher(mary, maker,[history2, math2 ]).

teacher(chris,grahm,[geometry]).

В цьому прикладі відмітимо опис DOMAINS :

domains

class = symbol*

Тут ми показуємо, як представляються в Пролозі списки.

Символ (*) означає, що class є символьним списком. Аналогічно можна визначити список цілих чисел:

domains

integer_list = integer*

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