/ \
/ \
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')),
в якому ми стверджуємо, що Джон має книгу 'З теперішнього в майбутнє', яку написав Джеймс Джонс. Подібно ви можете написати: