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

5.1.1. Константи як об'єкти даних.

Константи включають символи, числа і атоми. Значення константи міститься в її імені. Так константа 2 може символізувати тільки число 2, а константа abracadabra може символізувати тільки стрічку abracadabra.

Символи.

Символи мають тип char, вони будуються з символів коду ASCII.

Існує два способи задання символів в якості констант Прологу: безпосередньо, або ж з попереднім символом (\). Ось приклад деяких друкованих символів: 'f', '4','F'. Якщо ж вам потрібно написати символи типу (\), ("), ('), тоді перед ними потрібно поставити символ (\): ('\\'), ('\"'), ('\''). Деякі пари символів позначають спеціальні дії, наприклад:

'\n'-перехід на нову стрічку;

'\r'-повернення каретки;

'\t'-горизонтальна табуляція.

Числа.

Числа мають тип або іnteger, або real. Цілі містять значення з діапазону від -32768 до 32767 включно. Дійсні зберігаються в форматі ІEEE в проміжку від 1е-308 до 1е308.

Атоми.

Атом має тип або ж symbol, або ж string. Пролог виконує автоматичне перетворення типів між цими двома доменами.

Ім'я символьних атомів починається з маленької букви.

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

5.2.Складні об'єкти даних і функтори.

Складні об'єкти даних дозволяють вам заключати декілька частин інформації в єдиний пункт. Наприклад, дата 2 квітня 1994 складається з 3 частин. Але іноді їх корисно з'єднати воєдино:

date("April",2,1989)

Так виглядає факт Прологу, в даному випадку - просто об'єкт даних. Він починається з імені або ж функтора (в нашому прикладі date). Функтор не символізує якесь обчисленя, яке повинно бути виконаним. Це просто ім'я об'єкту. Аргументи складного об'єкту самі можуть бути складними об'єктами.

BIRTHDAY

/ \

/ \

person date

/ \ / ! \

''Joe'' ''Jones'' ''Aug''20 1918

або ж

birthday(person(''Joe'',''Jones''),date(''Aug'',20,1918))

5.2.1.Уніфікація складних об`єктів.

Складний об`єкт може уніфікуватись або ж з простою змінною, наприклад,

data(''April'',2,1981) зрівнюється з X і зв'язує X з date(“April”,2,1981),

або ж з складним об'єктом, який співпадає з ним структурно:

так data(''April'',2,1981) зрівнюється з date(Mo,Da,Yr).

Використання знаку дорівнює для уніфікації складних об'єктів.

Пролог проводить уніфікацію в двох місцях. По перше, уніфікація проходить, коли є виклик співставлення голови фрази. Інший спосіб виконання уніфікації - це використання знаку (=). В цьому випадку Пролог буде ототожнювати об'єкти, які знаходяться з обох сторін знаку. Цей підхід є корисним для знаходження значень аргументів складного об'єкту. Наприклад, наступна програма виконує такі дії. Якщо дві особи мають одне й теж прізвище, тоді другій особі приписується адреса першої особи.

domains

person = person(name,address)

name = name(first,last)

address = addr(street,city,state)

street = street(number,street_name)

city,state,street_name = string

first,last = string

number = integer

goal

P1 = person(name(jim,mos),

addr(street(5,"1stst"),igo,"CA")),

P1 = person(name(_,mos),Address),

P2 = person(name(jane,mos),Address), write(P2).

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

owns(john,book('From Here to Eternity','James Jones')),

в якому ми стверджуємо, що Джон має книгу 'З теперішнього в майбутнє', яку написав Джеймс Джонс. Подібно ви можете написати:

owns(john,horse(blackly)),

який можна було б інтерпретувати так:

Джон має коня, якого кличуть blacky.

Складними об'єктами в цих прикладах будуть:

book('From Here to Eternity','James Jones') і

horse(blacky).

Якщо написати два факти:

owns(john,'From Here to Eternity').

owns(john,blacky).

тоді ви при традиційному запиті не зможете відрізнити :

blacky буде назвою книги чи кличкою коня. З іншого боку ми можемо використати в якості першої компоненти складного об'єкту функтор, для розмежування різних об'єктів. Для цього прикладу бажано було б використати функтори книги і коня.

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