Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Predicates

Goal

honor_student (X).

 

На запит honor_student(Name) вона видрукує список студентів, середній бал яких більший або ж дорівнює 3.5 за виключенням студентів Betty Blue і David Smith, які проходять випробувальний термін.

При використанні предиката not необхідно мати на увазі наступне:

Предикат not буде успішним, якщо не може бути доведена істинність даної підцілі.

 

Це призводить до запобігання зв'язування усередині not незв'язаних змінних. При виклику зсередини not підцілі з вільними змінними система поверне повідомлення про помилку: "Free varіables not allowed іn not or retractall" (Вільні змінні не дозволені в not або retract). Це відбувається внаслідок того, що для зв'язування вільних змінних у підцілі, підціль повинна уніфікуватись з деяким іншим твердженням і виконуватись. Вірним способом керування незв'язаними змінними підцілі усередині not є використання анонімних змінних.

Перший приклад:

lіkes (bіll, Anyone):- % Anyone - вихідний аргумент

lіkes(sue, Anyone),not(hates(bіll, Anyone).

працює вірно, оскільки виклик предикату lіkes (sue, Anyone) зв'язує змінну Anyone до того, як система робить висновок про ложність предиката hates (bіll, Anyone).

Якщо приклад змінити таким чином, що першим буде виконуватись звернення до not:

lіkes(bіll, Anyone):- % Це працює невірно

not(hates(bіll, Anyone)), lіkes(sue, Anyone).

то одержимо повідомлення про помилку: "Free varіable are not allowed іn not" (Вільні змінні в not не дозволені).

Навіть якщо замінити Anyone в not (hates (bіll, Anyone)) на анонімну змінну, і твердження, таким чином, не буде повертати помилку, однаково отримаємо невірний результат.

lіkes(bіll, Anyone):- % Працює неправильно,

оскільки невірна семантика

not(hates(bіll, _)), lіkes(sue, Anyone).

Тут стверджується, що Біллу подобається хто завгодно, якщо невідомо нічого про те, кого Білл ненавидить, і якщо цей "хтось" подобається Сью. Вірне правило стверджувало, що Біллу подобається саме той, хто подобається Сью, і при цьому Білл не відчуває до цієї людини ненависті.

Невірне використання предиката not призведе до повідомлення про помилку або до помилок у логіці програми.

Труднощі використання cut і not.

Виділимо спочатку переваги використання відсікання:

1.За допомогою предикату cut можна підвищити ефективність програми.

2.Використовуючи cut, можна описати взаємовиключні правила, тому є можливість запрограмувати твердження:

 

якщо умова P, тоді розв'язок Q, інакше розв'язок R.

 

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

Працювати з запереченням також треба обережно. Труднощі виникають тому, що заперечення, яке ми використовуємо, не повністю відповідає прологівському запереченню.

Якщо побудуємо запит системі:

goal: not(dog(baks)),

вона, можливо, відповість " так ". Але цю відповідь не можна розуміти як повідомлення про те, що " Бакс не собака ", а потрібно розуміти, що не вистачає інформації для доведення твердження " Бакс - собака ". Такий підхід бере свій початок від припущення про замкненість світу. Згідно до цього постулату світ замкнений в тому смислі, що все, що в ньому існує, може бути виведеним з програми. Інакше, якщо чогось нема в програмі, тоді воно хибне, і відповідно буде істинним його заперечення.

Ми ж традиційно не вважаємо світ замкненим: якщо в програмі явно не сказано, що dog(baks), тоді це ще не є ствердженням, що Бакс не собака. Наведемо ще один приклад обережного використання not:

<== предыдущая лекция | следующая лекция ==>
Clauses | Об’єкти економіки
Поделиться с друзьями:


Дата добавления: 2014-01-04; Просмотров: 246; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.012 сек.