Студопедия

КАТЕГОРИИ:


Архитектура-(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.

 

 

ЗАДАНИЕ НА РЕКУРСИЮ.

 

  1. Написать программу для рекурсивного определения функции X2. (X – целое положительное)
  2. Написать программу для рекурсивного определения суммы 1+2+3+4+…+n. n задается.
  3. Написать программу для рекурсивного определения min(A, B,C).

 

Теперь обратимся к повторениям. Рассмотрим следующий пример.

 

vxod:-

<== предыдущая лекция | следующая лекция ==>
Начало ритуального бега | Лабораторная работа №4. Работа с окнами.
Поделиться с друзьями:


Дата добавления: 2015-06-27; Просмотров: 478; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.013 сек.