Convert_month(dec, 12)

 

Як працює програма?

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')).

і