Book(title,author)

другий аргумент функтору bookє author. Але старий опис

author = symbol

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

Ми повинні зараз специфікувати, що author є складним об'єктом, який включає ім'я та прізвище:

Author(first_name,last_name)

Котре вимагає наступний опис:

Domains

articles = book(title, author) ;

Horse(name) ;

Boat ;

Bankbook(balance)

author = author(first_name,last_name)

title, author, name = symbol

balance = real

 

Коли використовуються складні об'єкти різного рівня, їх зручно зображати у вигляді дерева.

 

 

Book

/ \

Title author

/ \

/ \

Firstname lastname

 

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

book=book(title,author(firstname,lastname))

 

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