КАТЕГОРИИ: Архитектура-(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) |
Связывание переменных
СОПОСТАВЛЕНИЕ С ОБРАЗЦОМ Константные, с переменными. При поиске решения ПРОЛОГ может выполнять следующие операции: сопоставление с образцом, связывание переменных, откат и освобождение переменных. Рассмотрим эту операцию на примере простой константной цели.
Метод решения прост - надо просмотреть все предикаты man(symbol) и сопоставить аргументы предложения-цели и предложения-факта. Если они совпадают - цель доказана. Пролог подтверждает YES, если такого факта нет, то NO. Но это не значит, что Джон не мужчина. Просто такого факта в базе знаний нет! Операция сравнения цели с предложениями программы называется операцией сопоставления с образцом и начинается сверху вниз, а сравнение параметров слева направо. Поиск составной константной цели отличается тем, что операция сопоставления производится необходимое количество раз.
Чтобы доказать составную цель, необходимо доказать все подцели слева направо. В данном случае 1 цель совпадает с 3 предложением, а вторая цель - с 8 предложением. То есть цель доказана. Рассмотрим операцию на примере поиска простой цели с переменными.
Пролог начинает операцию сопоставления с образцом (сверху вниз), причем сопоставляются только константы цели и образца. Первым подходящим предложением является второе: цель father(Who, tom). образец father(bob, tom). Далее Пролог делает операцию связывания свободной переменной Who с константой образца. Свободная переменная становится связанной переменной со значением bob. Прологу удалось найти факт, не противоречащий цели, связав переменную Who. Цель доказана. Пролог выводит значение связанной переменной Who=bob. Операцию связывания называют также операцией унификации, а программы ее осуществляющие - программами унификации. Программы унификации ищут все возможные решения. При поиске составной цели с переменными также производится связывание переменных, а в случае неудачи – откат и возвращение на предыдущую позицию.
Пролог начинает доказывать 1 цель. Образец father(bob, X) удается сопоставить со вторым предложением father(bob, tom). При этом свободная переменная Х связывается значением X=tom. Подцель доказана. Пролог переходит к доказательству второй подцели - woman(tom). Вторая цель не может быть доказана, так как такого факта нет. НЕУСПЕХ. Но решение то есть. Просто первое связывание оказалось неудачным. Пролог освобождает связанную переменную и возвращается (откатывается) к доказательству первой подцели, так как еще есть предложения с которыми можно сопоставлять. Второе сопоставление образца father(bob, X) с предложением father(bob, pat) связывает X значением pat. Доказательством второй подцели - woman(pat) является 8 предложение. Пролог нашел решение: X=pat 1 Solution
Рассмотрим дерево решений (поиска) для предыдущего примера. При доказательстве 1 подцели father(bob, X) возможны три варианта. Пролог просматривает их поочередно: первый отбрасывает, второй – подходит, поэтому «разворачивает» эту ветвь до конца. При доказательстве 2-ой подцели просматривает два варианта. Таким образом, возникает шесть возможных вариантов решения. Такой метод поиска, когда Пролог обходит дерево решений сверху вниз и слева направо, называется поиском в глубину. Схема дерева решений представлена на рис. 1. Крестиком помечены ложные пути, т.е. откат.
Рис. 1. Дерево решений для цели father(bob, X),woman(X).
Сопоставление с предложением правилом. Предложение правило состоит из двух частей: головы и хвоста (заголовка и тела). В этом случае цель сопоставляется с заголовком правила. Имеющиеся свободные переменные связываются с соответствующими значениями. Если правило, в свою очередь содержит в заголовке переменные, то свободные переменные цели связываются со свободными переменными заголовка без значения. Затем Пролог переходит к доказательству подцелей правила.
Пример 1. CLAUSES likes(bob, nut). Боб любит орехи likes(jim, apple). Джим любит яблоки likes(tom, X):-likes(jim,X). Том любит то, что любит Джим GOAL likes(tom,Y). Что любит Том? Здесь подходит 3-ий предикат. Но он является правилом. Поэтому переменная Y связывается с переменной X правила. Затем Пролог начнет доказывать подцель likes(jim,Y). Такой факт находится Y=apple. Тогда X=apple. Том любит яблоки. Пример 2.
Решение. 1. Y=Who. Докажем три подцели тип(X,животное), вид(Who, X), живет(Who, вода). Первая подцель X=копытное (1-я строка). Вторая подцель вид(Who,копытное) Who=зебра Третья цель живет(зебра, вода) не разрешается Откат 2. Первая подцель X=рыба Вторая подцель вид(Who,рыба) Who=сельдь Третья цель живет(сельдь, вода) не разрешается Откат 3. Вторая подцель вид(Who,рыба) Who=акула Третья цель живет(акула, вода) разрешается. Решение: может плавать акула. ВНЕШНЯЯ И ВНУТРЕННЯЯ ЦЕЛЬ Внешней считается цель (запрос), которая задается в результате диалога с пользователем, т.е. после запуска программы в окне Dialog. В таком случае программа находит все правильные решения. Внутренняя цель включается непосредственно в саму программу. Создается отдельный раздел goal. Каждое предложение, задающее цель, должно оканчиваться точкой. После нахождения первого правильного решение, выполнение программы прекращается. Для вывода всех правильных решений используется специальный предикат fail.
Дата добавления: 2014-01-07; Просмотров: 780; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |