Використання складових термів

У передмові функціональний терм або предикат можна розглядати як структуру даних, подібну записи в мові Паскаль. Терм, що представляє сукупність термів, називається складовим термо або структурою. Складові структури даних в Пролозі оголошуються в розділі domains. Якщо терми структури відносяться до одного і того ж типу доменів, то цей об'єкт називається однодоменних структурою даних. Якщо терми структури відносяться до різних типів доменів, то така структура даних називається багатодоменному структурою даних. Використання доменної структури спрощує структуру предиката.

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

Синтаксично складовою терм виглядає так само, як і предикат: у терма є функтор і список аргументів, укладених в круглі дужки.

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

collector, title, author, publisher = symbol

personal_library = book (title, author, publisher, year)

collection (collector, personal_library)

dq1 (collector, title, year)

max_year (title, author, year)

% Q1 (Y): - collection (C, book (T, _, _, Y), write (C, '', T, '', Y), nl, fail.

q1 (Y): - not (dq1 (_, _, Y)), collection (C, book (T, _, _, Y), assert (dq1 (C, TY)), write (X, '', T, '', Y), nl, fail.

q2: - collection (_, book (T, A, _, Y), max_year (T1, A1, Y1), Y> Y1, retract (max_year (T1, A1, Y1)), assert (max_year (T, A , Y)), fail.

В даному випадку змінна Y використовується для уніфікації частини складеного терма.Еслі мета поставити у вигляді:

Представлення даних часто вимагає наявності великого числа структур. У передмові ці структури повинні бути описані. Для більш компактного опису структур даних в Пролозі пропонується використання альтернативних описів доменів.

Приклад 25: Необхідно створити БД, що містить відомості про книгах і аудіозаписах з особистої бібліотеки.

person, title, author, artist, album, type = symbol

thing = book (title, author); record (artist, album, type)

owns (person, thing)

owns (irina, book ( «Using Turbo Prolog», «Yin with Solomon»)).

owns (petr, book ( «The art of Prolog», «Sterling with Shapiro»)).

owns (anna, book ( «Prolog: a relation language and its applications», «John Malpas»)).

owns (irina, record ( «Elton John», «Ice Fair», «popular»)).

owns (petr, record ( «Benny Goodman», «The King of Swing», »jazz»)).

owns (anna record ( «Madonna», «Madonna», «popular» »)).

owns (X, record (_, _, «jazz»)

Visual Prolog дозволяє конструювати багаторівневі складові терми. Наприклад, в термі record ( «Elton John», «Ice Fair», «popular») замість прізвища артиста можна використовувати нову структуру, яка буде описувати артиста більш детально:

при цьому терм буде виглядати наступним чином: record (art ( "Elton", "John"), «Ice Fair», «popular»).

Схожі статті