КАТЕГОРИИ: Архитектура-(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) |
Рекурсивные вычисления в Пролог-программе
Пример. Переменные в Пролог-программе Пример. name (man, "Петр")
Основными называются термы, не содержащие переменных, т.е. факты. Термы, содержащие переменные называются неосновными. Сложный терм является в Пролог-программе или функтором, или оператором. Определение сложного терма в программе содержит имя, представляющее собой атом, и совокупность аргументов, которые в свою очередь также могут быть простыми и сложными термами. Переменные в Пролог-программе являются не местом в памяти, а реальным объектом. Место действия одной переменной – одна резольвента. При осуществлении механизма возврата значения всех переменных в резольвенте, через которые осуществляется возврат, очищаются. Переменная в Пролог-программе представляет собой последовательность знаков подчеркивания, строчных и прописных букв, которая всегда начинается с прописной буквы или со знака подчеркивания. domains /* раздел данных */ тип фигуры = symbol выражение для площади = string predicates площадь (тип фигуры, выражение для площади) фигура (тип фигуры, выражение для площади) goal площадь (круг, Z). clauses площадь (X, Y):- фигура (X, Y), write ("X=", X, "Y=", Y). фигура (квадрат, "сторона * сторона"). фигура (круг, "pi * радиус * радиус"). фигура (треугольник, "1/2 * основание * высота"). фигура (__, "неизвестно").
Наличие символа «__» означает использование фиктивной переменной. В рассмотренном примере с ее помощью реализован квантор общности. В разделе данных domains объявлены типы данных пользователя («тип фигуры» и «выражение для площади»), а также указано, что «тип фигуры» эквивалентен стандартному символьному типу (symbol), а тип «выражение для площади» – стандартному строковому типу (string). Рекурсивное описание правила содержит в своем теле ссылку на заголовок этого же правила. Возможны следующие три варианта рекурсивных правил: · правая рекурсия − pr 1():- pr 11(), pr 12(),..., pr 1N(), pr 1(). · левая рекурсия − pr 1():- pr 1(1), pr 21(), pr 22(),..., pr 2M(). · обобщенная рекурсия −
Для исключения зацикливания во время выполнения рекурсивного правила необходимо предусмотреть условия завершения рекурсии, которое обычно реализуется одним из двух способов: · заданием в программе альтернативного правила или факта pr 1(), не содержащего рекурсии (выход происходит при успешном выполнении этого правила); · формированием условия выхода одним из предикатов pr 11(), pr 12()…, - выход происходит если в процессе выполнения правилах хотя бы один из предикатов завершается неуспехом. Предикаты pr 21(), …, pr 2M() не влияют на выполнение рекурсии, а выполняются только после выхода из нее. Эти предикаты получают значения переменных из стека, в который они помещаются на время выполнения рекурсии. Производимые при этом вычисления называют хвостовыми вычислениями. Идеи реализации рекурсивных вычислений представлены в примере и в табл. 3.1, составленной на основе соответствующей Пролог-программы.
Дата добавления: 2014-12-29; Просмотров: 588; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |