вуватися не тільки константи, але і змінні. На змінні в правилах діють квантори спільності, тому правила дуже концентровано і лаконічно виражають конструкції логічного висновку. Так, до фактів прикладу 2 можна додати наступне твердження:
крутойпарень (Х): - подобається (Х, реп), носить (Х, блейзер).
Це означає В«будь Х - крутий хлопець, якщо Х подобається реп і Х носить блейзерВ». Ще приклади правил:
їсть (Х, Y): - їжа (Y), любить (Х, Y). (В«Кожен Х їсть будь Y, якщо Y - їжа,
і Х любить Y В»)
власник (А, В): ​​- купив (А, В). (В«Будь А є власник кожного В, якщо А купив ВВ»)
У Пролозі всі пропозиції програми - факти, правила, питання - закінчуються крапкою.
Зазначимо, що в Пролозі замість оператора присвоювання мається більш загальний і потужний механізм завдання значень змінних. Змінні в Пролозі отримують свої значення в результаті зіставлення з константами у фактах і правилах. До тих пір. поки змінна не отримала якого-небудь значення, вона називається В«вільноїВ». Коли мінлива прийме значення, вона стає В«пов'язаноїВ». Однак, вона залишається пов'язаної тільки протягом часу, необхідного для отримання однієї відповіді на запит, після цього Пролог В«розв'язуєВ» її, повертається і шукає альтернативні рішення. Це дуже важливий момент: не можна зберігати інформацію, задаючи значення змінних. Змінні служать частиною процесу зіставлення, а не В«сховищемВ» інформації. Область дії змінної-рівно одну пропозицію (правило або запит програми). p align="justify"> Питання - відправна точка логічного висновку, що відбувається при виконанні програми. На будь-яке питання комп'ютер буде намагатися дати відповідь В«ТакВ» або В«НіВ» залежно від того. узгоджується чи ні твердження, що стоїть у питанні, з фактами і правилами бази знань. Питання, що не містить змінних, є загальним: В«чи має місце факт ... ? В». Так, наприклад, до бази знань прикладу 1 можна поставити питання
?-телефон (иванов, т123456).
і відповідь буде В«НіВ», так як константа т123456 не узгоджується ні з одним фактом.
Якщо до бази знань (приклад 3)
подобається (сергей, реп).
подобається (юрий, джаз).
носить (сергей, блейзер).
носить (юрий, піджак).
крутойпарень (Х): - подобається (Х, реп), носить (Х, блейзер).
поставити запитання
?-крутойпарень (юрій).
то буде отримана відповідь В«НіВ». Справді, в результаті резолюції затвердження в цьому питанні згідно з правилом заміниться кон'юнкція тверджень
нравнтся (юрий, реп), носить (юрий, блейзер).
(змінна Х в правилі отримала значення В«юрійВ»). Ці твердження не узгоджуються з іншими фактами бази знань. Для питання
? - Крутойпарень (сергей). br/>
буде отримана відповідь В«ТакВ», так як в цьому випадку протиріч при узгодженні питання і бази знань не виникає.
Питання, в якому є змінні, є приватним: В«для яких значень змінних факт ... має місце? В». У процесі зіставлень при виконанні програми змінні отримають значення тих констант (конкретизуються), для яких зіставлення запиту, в цілому, успішно, і будуть виведені на екран. Так, у відповідь на запитання
? - Телефон (иванов, Х). br/>
до бази знань прикладу 1 на екрані з'явиться повідомлення Х = т561532 і буде дана відповідь В«ТакВ».
Якщо до бази знань прикладу 3 поставити запитання у формі
? - крутойпарень (А).
то вільна мінлива А в питанні зіставляється з вільною змінною Х в правилі і поєднується з нею, тобто стає одним і тим же. В результаті резолюції згідно з правилом станеться заміна
крутойпарень (А)
на
подобається (А, реп), носить (А, блейзер),
а потім предикат В«нравнтся (А.реп)В» успішно узгоджується з фактом В«подобається (сергей, реп)>>, і при цьому змінна А конкретизується значеннямВ« Сергій В»; від питання тепер залишається В«носить (сергей, блейзер)В», а в базі знань є відповідний факт. Відповідь: В«ТакВ» і на екрані з'явиться значення присутньої в питанні змінної А:
А = сергей.
Зазначимо, що...