КАТЕГОРИИ: Архитектура-(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) |
Clauses. Nondeterm min(integer,integer,integer,integer)
Nondeterm repeat Nondeterm vxod Predicates Min(A1,B1,Y1,X). Goal Min(A1,B1,Y1,X). Clauses Nondeterm min(integer,integer,integer,integer) Predicates Factor(N1,Z1,X). Goal Factor(N1,Z1,X). Clauses Nondeterm factor(integer,integer,integer) Predicates ЛАБОРАТОРНАЯ РАБОТА №3.
РЕКУРСИЯ И ПОВТОРЕНИЯ.
ЦЕЛЬ. Изучить механизм рекурсии и механизм повторения в языке Пролог.
ТЕОРИЯ. Рекурсия – это вызов одного предиката через самого себя. Обычно в качестве примера дают вычисление факториала. Рассмотрим, как это делается в Прологе.
include "my.inc" factor(1,Z,X):- X=Z. factor (N,Z,X):- Z1=Z*N, N1=N-1, factor(5,1,X), write("Factor=",X), readchar(_).
Здесь вычисляется факториал 5. Он равен 120 (5!=120). Вычисление факториала n! Реализуется по формуле FACTOR(n)=n*FACTOR(n-1). Такая формула называется рекурсивной, поскольку она вычисляется через саму себя, но с меньшим значением аргумента. В программе в формуле FACTOR(…) три аргумента: само число, накопленное значение факториала и переменная для результирующего значения.
Имеется два правила. Легче всего понять второе: factor (N,Z,X):- Z1=Z*N, N1=N-1,
Здесь считается, что Z – текущее накопленное произведение (вычисленная часть факториала). Далее формируется новое произведение: Z1=Z*N, Само число N уменьшается на единицу: N1=N-1, После этого вызывается factor(N1,Z1,X) для уменьшенного уже на единицу числа N и нового промежуточного значения факториала. Рано или поздно после вычитания единиц из числа это число само станет равным 1 и тогда нам потребуется первое правило: factor(1,Z,X):- X=Z.
Здесь Z уже и будет реальным накопленным произведением, равным значению факториала.
Другой пример – рекурсивное вычисление минимума из двух чисел:
min(0,B,Y,X):- X=Y. min(A,0,Y,X):- X=Y. min(A,B,Y,X):- A1=A-1, B1=B-1, Y1=Y+1, min(5,3,0,X), write("Minimum=",X), readchar(_).
Здесь для отыскания минимума из чисел 5 и 3 вызываем предикат: min(5,3,0,X), значение минимума записываем в X. Будем считать, что минимум отыскивается для положительных чисел. Основное рекурсивное правило такое:
min(A,B,Y,X):- A1=A-1, B1=B-1, Y1=Y+1,
Это правило следует понимать так, что минимальное из двух чисел не изменится, если из каждого из этих чисел вычесть по 1. Само минимальное значение при этом нужно нарастить на 1. Теперь должен быть ясен смысл первых двух правил: min(0,B,Y,X):- X=Y. min(A,0,Y,X):- X=Y.
ЗАДАНИЕ НА РЕКУРСИЮ.
Теперь обратимся к повторениям. Рассмотрим следующий пример.
vxod:-
Дата добавления: 2015-06-27; Просмотров: 500; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |