КАТЕГОРИИ: Архитектура-(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) |
Вмешательство в процесс согласования цели
Здесь рассматриваются команды, которые позволяют изменять порядок работы программы. С их помощью можно повторить некоторые фрагменты, которые желательно изучить более подробно, обойти случаи про которые известно, что они не относятся к делу и наоборот, заставить программу рассмотреть случаи, которые иначе она могла бы и не обнаружить. Все это способно значительно ускорить отладку, поскольку позволяет подвергнуть многократной проверке особо сложные части программы не повторяя заново весь ее запуск с самого начала. • «retry» (повторить): Если вы задали команду «retry» после какого-либо события для некоторой цели, то Пролог вернется к тому месту, где он первоначально осуществил ВЫЗОВ (событие CALL) этой цели. Все будет в точности так же, как и в момент первоначального появления этой цели (кроме каких-либо добавлений к базе данных, которые могли быть сделаны). Это означает, что вы можете еще раз проследить за тем, что происходит при согласовании данной цели. На практике обычно сочетают использование команд «retry» и «skip». Если вы сомневаетесь в том, что ошибка возникает при согласовании некоторой цели, вы можете сперва пропустить (с помощью команды «skip») трассировку процесса ее согласования. Это означает, что вы не намерены пробираться через массу трассировочных данных, относящихся к цели, процесс согласования которой выполняется совершенно правильно. Если же возникла ошибка, и цель либо не согласуется с базой данных, либо дает неверный результат, то у вас сохраняется возможность после всего этого (с помощью команды «retry») вернуться назад и проследить за всем более внимательно. • «or» (или): Эта команда, в точности как ';', означает просьбу о выборе альтернативного решения некоторого вопроса. Если вы находитесь в точке ВЫХОДа из цели (событие EXIT), вы также можете попросить о выборе альтернативы. Таким образом, если известно, что первый найденный ответ не позволяет успешно завершить остальную часть программы, можно тут же попросить о поиске другого решения. Это означает, что вы сможете быстрее добраться до той части программы, где содержится ошибка. Без такого режима вам пришлось бы «караулить» возможную неудачу процесса согласования после того, как была найдена первая альтернатива. • «fail» (неудача): Эта команда в основном используется при наступлении события CALL. Если вы знаете, что данная цель в конце концов окажется несогласованной с базой данных, и что эта цель для вас не представляет интереса, то вы можете тут же принудительно завершить процесс согласования неудачно, задав эту команду. Ниже приводится пример использования различных рассмотренных команд при изменении порядка согласования одного вопроса:
?- принадлежит(Х,[а,b,с]), принадлежит(Х,[b,d,е]). CALL принадлежит(_ 44,[a, b,с])? creep EXIT принадлежит(a, [а,b,с])? or REDO принадлежит(a, [а,b,с])? creep CALL принадлежит(_44,[b,с])? fail FAIL принадлежит(_44,[b,с])? creep FAIL принадлежит(_44,[a,b,с])? retry CALL принадлежит(_44,[а,b,с])? creep EXIT принадлежит(а,[а,b,с])? creep CALL принадлежит(а,[d,с,е])? fail FAIL принадлежит(a,[d,c,e])? creep REDO принадлежит(а,[а,b,с])? creep CALL принадлежит(_44,[b,с])? creep EXIT принадлежит(b,[b,с])? or REDO принадлежит(b,[b,с])? creep CALL принадлежит(_ 44,[с])? fail FAIL принадлежит(_44,[с])? retry CALL принадлежит(_44,[с])? creep E XIT принадлежит(с,[с])? creep EXIT принадлежит(с,[b,c])? creep EXIT принадлежит(c,[a,b,с])? creep CALL принадлежит(c,[d,c,e])? creep CALL принадлежит(c,[c,e])? creep EXIT принадлежит(c,[c,e])? creep EXIT принадлежит(c,[d,c,e])? or REDO принадлежит(c,[d,c,e])? creep REDO принадлежит(c,[c,e])? creep CALL принадлежит(c,[e])? creep CALL принадлежит(c,[])? creep FAIL принадлежит(c,[])? creep FAIL принадлежит(c,[е])? creep FAIL принадлежит(c,[с,е])? retry CALL принадлежит(c,[с,e])? creep EXIT принадлежит(c,[c,e])? creep EXIT принадлежит(с,[d,с,е])? creep
Дата добавления: 2014-12-08; Просмотров: 411; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |