Як працює програма?
1. Спочатку, програма робить вікно на екрані дисплею для відображення результату.
2. Після, вона друкує заголовок у вікно, для полегшення інтерпретації результату.
3. Далі, в предикаті get_month_birthday за допомогою вмонтованого предикату date отримуємо значення поточного місяця.
4. Після, програма робить пошук по базі даних списку людей, які народилися в поточному місяці.
Знаходиться перша особа в базі даних. Виклик предикату phone_list(Person,_,Date) зв'язує ім'я і прізвище цієї особи з змінною Pеrson для співставлення функтору person з змінною Person. Виклик також зв'язує день народження цієї особи з змінною Date.
Відмітимо, що вам досить використання однієї змінної для запам'ятовування повного імені особи і однієї змінної для запам'ятовування повної дати дня народження. Це результат використання складних об'єктів.
5. Зараз програма може обробляти день народження особи, використовуючи змінну Date. Така обробка починається в наступній підцілі, де програма обробляє поточний місяць, який заданий числом і день народження особи в предикаті check_birthday_month.
6. Звернемо увагу на те, як цей процес проходить. Пролог викликає предикат check_birthday_month з двома змінними: перша змінна зв'язана з цілим, а друга - з функтором і його трьома аргументами. В голові правила, де визначається предикат check_birthday_month перший аргумент This_month зрівнюється з змінною Моn. Другий аргумент Date співставляється з b_date(Month,_,_). Це добре, оскільки він є тим же значенням об'єкту даних, яке ви обробляєте.
Оскільки всі наші дії пов'язані тільки з місяцем народження особи, в якості дня і року народження можуть виступати анонімні змінні.
7. Предикат check_birthday_month спочатку конвертує символьне позначення місяця в числове значення. Після, Пролог може порівняти значення поточного місяця з значенням місяця народження особи. Якщо порівняння задовольнилось, обробка може закінчуватись. Тому далі стоїть підціль fail. В іншому випадку Пролог-система починає бектрекінг для пошуку іншого розв'язку.
8.Наступна підціль write_person друкує повне ім'я особи до списку осіб, день народження яких належить поточному місяцю, підціль fail форсує бектрекінг.
5.4.Опис доменів складних об'єктів.
В цій секції ми покажемо як визначаються домени для складних об'єктів.
Після компілювання програми, яка містить наступні відношення:
owns(john,book('From Here to Eternity','james Jones')).
і