![]() КАТЕГОРИИ: Архитектура-(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) |
Solutions. Written_by(author, title)
Written_by(X,Y). Clauses Long_novel (title) Written_by(author, title) Book(title, pages) Predicates Domains title, author = symbol pages= unsigned written_by(fleming, "DR NO"). written_by(melville, "MOBY DICK"). book("MOBY DICK", 250). book("DR NO", 310). long_novel (Title):- written_by(_, Title), book(Title, Length),Length > 300. Намагаючись виконати цільове твердження wrіtten_by(X, Y), Vіsual Prolog повинен перевірити кожне твердження wrіtten_by(X, Y) у програмі. Співставляючи аргументи X і Y з аргументами кожного твердження wrіtten_by, Vіsual Prolog виконає пошук від початку програми до її кінця. Виявивши твердження, що відповідає цільовому, Vіsual Prolog зв’язує вільні змінні із значеннями таким чином, що твердження цілі й бази знань стають ідентичними. Говорять, що цільовий предикат уніфікується із предикатом програми. Така операція співставлення називається уніфікацією. Оскільки X і Y є вільними змінними в цільовому предикаті, а вільна змінна може бути уніфікована з будь-яким іншим аргументом (і навіть із іншою вільною змінною), то цільовий предикат може бути уніфікованим з першим предикатом wrіtten_by у програмі, як показано нижче:
¯¯ written_by(fleming,"DR NO"). Visual Prolog встановлює відповідність, X стає зв’язаним з fleming, a Y – із “dr no”. Тоді Visual Prolog надрукує: X=fleming, Y="DR NO" Оскільки система шукає всі рішення для заданої цілі, цільове твердження також буде уніфіковано ще й із другим твердженням written_by: written_by(melville, "MOBY DICK"). Система надрукує і друге рішення: X=melville, Y="MOBY DICK"
Розглянемо, як Vіsual Prolog виконає наступне цільове твердження: long_novel(X). Коли Vіsual Prolog намагається виконати цільове твердження, він перевіряє, чи дійсно виклик може відповідати факту або заголовку правила. У нашому випадку встановлюється відповідність із long_novel(Tіtle) Vіsual Prolog перевіряє предикат для long_novel, намагаючись завершити співставлення уніфікацією аргументів. Оскільки в цільовому твердженні X - вільна змінна, то вона може бути уніфікована з будь-яким іншим аргументом. Tіtle також не є зв'язаним у заголовку правила long_novel. Тому цільове твердження відповідає заголовку правила, і уніфікація здійснюється. Згодом Vіsual Prolog намагатиметься погодити підцілі із правила
long_novel(Tіtle):- wrіtten_by(_, Tіtle), book(Tіtle, Length), Length>300.
Намагаючись виконати тіло правила, система звернеться до першої його підцілі - wrіtten_by(_, Tіtle). Оскільки авторство книги є несуттєвим, на місці аргументу author з'явиться анонімна змінна (_). Звернення wrіtten_by (_, Tіtle) стає поточною підціллю, і Пролог шукає рішення для неї. Пролог шукає від вершини й до кінця програми відповідність із даною підціллю. У результаті досягається уніфікація з першим фактом для wrіtten_by, а саме:
Дата добавления: 2014-01-04; Просмотров: 322; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |