ні. Численні описи виду В«все х мають властивість РВ» треба вважати лише приблизно істинними. Наприклад, можна говорити, що всі птахи літають (за винятком страусів, пінгвінів і т.д.). p align="justify"> Взагалі цікаво використовувати знання, на кшталт В«всі птахи літаютьВ», і піддавати міркування сумніву лише в деяких заздалегідь відомих виняткових випадках. Це називається міркуванням з умовчаннями. Запропоновано численні формалізації для вираження В«все х мають властивість Р, за винятком тих випадків, коли явно зазначено противне для деяких конкретизацій змінної хВ»
Викладемо формалізм, заснований на об'єктному поданні та допускає побудову міркування з умовчаннями. Розглянутий нами підхід зберігає певну простоту міркувань. Він полягає в дозволі здійснювати виключення в міркуваннях Затвердження виду В«всі викладачі університету мають ступінь доктораВ» можна спочатку зробити без всяких винятків. З нього виводимо, що В«Жак має ступінь доктора, якщо Жак викладає в університетіВ». Якщо надалі з'ясується, що Жак не має ступеня доктора, то ми анулюємо нашу дедукцію і так змінимо універсальне твердження про викладачів університету, щоб Жак виявився виключеним. p align="justify"> Спосіб, яким операція паросполучення використовує спадкове властивість, може дати автоматичний механізм обробки виключень такого роду. Керуючий операцією паросполучення механізм може використовувати спадкове властивість для виведення деякого властивості об'єкта, тільки якщо специфічна інформація про цю властивість чи не з'явиться у відповідному цьому об'єкті фреймі. Наприклад, ми цікавимося, який диплом у Жака. Для відповіді на питання спочатку спробуємо встановити паросполучення фрейму-цілі з фреймом фактом. Якщо фрейм факт по Жаку має вигляд
Жак_2
елем: (елем_із проф_унів)
дипл: магістр
то паросполучення залучає уніфікацію (у, магістр) і відповідь така: магістр (Жак має диплом магістра). Навпаки, якщо фрейм-факт по Жаку говорить лише, що він професор університету:
Жак_2
елем: (елем_із проф_унів)
то механізм паросполучення використовує фрейм
{х | проф_унів}
дипл: доктор
і відповідь - доктор.
40. Мова Prolog. Декларативний і процедурний сенс пролог програм
Слід розрізняти два рівня сенсу програм мовою Пролог, а саме:
В· декларативний зміст і
В· процедурний сенс
Декларативний сенс стосується лише відносин, визначених у програмі. Таким чином, декларативний зміст визначає, що повинно бути результатом роботи програми. З іншого боку, процедурний сенс визначає ще і як цей результат був отриманий, тобто як відносини реально обробляються Пролог-системою.
Здатність пролог-системи опрацьовувати багато процедурних деталі самостійно вважається одним із специфічних переваг Прологу. Це властивість спонукає програміста розглядати декларативний зміст програми відносно незалежно від її процедурного сенсу. Оскільки результати роботи програми в принципі визначаються її декларативним глуздом, останнього (знову ж таки в принципі) достатньо для написання програм. Цей факт має практичне значення, оскільки декларативні аспекти програми є зазвичай більш легкими для розуміння, ніж процедурні деталі. Щоб програмісту витягти з цієї обставини найбільшу користь, програмісту слід зосередитися головним чином на декларативному сенсі і по можливості не відволікатися на деталі процесу обчислень. Останні варто в можливо великою мірою надати самої Пролог-системі. p align="justify"> Такий декларативний підхід і справді часто робить програмування на Пролозі більш легким, ніж на таких типових процедурно-орієнтованих мовах, як Паскаль. На жаль, однак, декларативного підходу не завжди виявляється достатньо. Далі стане ясно, що особливо у великих програмах, програміст не може повністю ігнорувати процедурні аспекти з міркувань ефективності обчислень. Проте слід заохочувати декларативний стиль при написанні пролог-програм, а процедурні аспекти ігнорувати в тих межах, які встановлюють практичні обмеження. br/>