21200

Язык „Prolog” и его приложения

Лекция

Информатика, кибернетика и программирование

Язык Prolog€ и его приложения 13. Общие сведения Язык Prolog€ Programming in Logical разработан А. В языке Prolog€ реализованы идеи логического прграммирования – нового перспективного направления в развитии современных средств программирования которое возникло в рамках работ по созданию систем искусственного интеллекта. При использовании языка Prolog€ основное внимание уделяется описанию структуры решаемой задачи а не разработке традиционного алгоритма ее решения.

Русский

2013-08-02

175.5 KB

6 чел.

PAGE  3

\\Тема №13

13. Язык „Prolog” и его приложения

13.1. Общие сведения

Язык „Prolog ("Programming in Logical") разработан А.Кальмероэ в Марсельском университете в 1971 г. В языкеPrologреализованы идеи логического прграммирования\\ – нового перспективного направления в развитии современных средств программирования, которое возникло в рамках работ по созданию систем искусственного интеллекта.\\ Это направление базируется на одном из разделов математической логики – исчислении предикатов первого порядка (Лекция №7).

При использовании языкаPrologосновное внимание уделяется описанию структуры решаемой задачи, \\а не разработке традиционного алгоритма ее решения. Вместо задания сложной последовательности команд в традиционной программе, которые указывают машине на выполнение тех или иных действий, в языке Prolog”\\ описывается содержание решаемой задачи в терминах объектов и отношений между ними. В этом и состоит сущность декларативного программирования в отличие от алгоритмических языков программирования высокого уровня.

13.2. Объекты, структуры и типы данных языка Prolog

Prolog- программа оперирует c данными двух типов: числами и атомами.

Числа могут быть действительными и целыми;  например:   3    5.7   0.002   1.2Е-37

Атом - это совокупность символов, обозначающих некоторый абстрактный объект.\\ Атом начинается со строчной (малой) литеры и состоит из литер, цифр и символа подчеркивания. Если атом должен содержать другие специальные знаки или начинаться с прописной литеры, то он берется в апострофы;  например:    хома   ’Хома’    12_00    ’3_7’

\\Числа и атомы могут объединяться в структуры и списки.

Структура – это конструкция, которая состоит из имени структуры и списка элементов, которые отделяются запятыми и берутся в круглые скобки.\\ Элементами структур могут быть числа, атомы, переменные, другие структуры и списки; например:

\\имеет (хома, ’Мерседес’)        учится ( ольга, 10_Б)

Список представляет собой объединение элементов определенного вида, которые выделяются запятыми и берутся в квадратные скобки;  например:

[1,3,7,12]      [хома, ольга, петр, нина]      [а1_А, а2_Б, а3_В]

Списки отличаются от структур тем, что они не имеют имен и число элементов в них может меняться при выполнении программы.

Элементом структуры может быть переменная, служащая локальным именем некоторого объекта.\\  В отличие от процедурных языков программирования переменная в языке Prolog”  не рассматривается как выделенный участок памяти компьютера и служит для обозначения объекта, на который нельзя ссылаться по имени. Переменная начинается с прописной (большой) литеры или символа подчеркивания и может содержать только символы литер, цифр и подчеркивания;  например:  Х   Хома  _   _час. Переменная, которая состоит только из символа подчеркивания, является анонимной и используется в том случае, если имя переменной не существенно.

\\Объекты данных в языке Prolog” (числа, атомы переменные) называют также термами, а структуры – сложенными термами. Терм имеет имя – функтор, а число аргументов определяет его арность; \\ например:

  •  атом   хома   является  термом  с  функтором  хома  и  арностью  0;
  •  структура  имеет (хома, ’Мерседес’)  является  термом  с функтором  имеет  и  арностью  2.

\\13.3. Стандартные типы данных

Компилятор языка Prolog  использует следующие типы данных:

а) char8-битовый ASCII-символ, который заключается в апострофы и обозначается начальным символом  \ ;

б) integer  - целое число в диапазоне [–32768 32767];

в) real – действительное число в диапазоне [+1Е-307 +1Е+308] – для положительных чисел  и [-1Е+308 -1Е-307] – для отрицательных чисел;

г) symbol – последовательность литер, цифр и знаков подчеркивания, которая начинается со строчной (малой) литеры или заключается в кавычки;

д) stringпоследовательность символов в кавычках;

е) file – имя файла.

Алфавит языка Prolog  включает следующие символы:

  •  английские и русские литеры;   цифры:  0 1 2  9
  •  скобки:   (, )    [, ]
  •  знаки арифметических действий:   +   -   *    /   mod    div ;
  •  знаки отношений:   <    >    =           <>    ><
  •  знаки комментариев:   /*    */    % ;
  •  ограничители:   .    ,    ;    ’    "    :-
  •  специальные знаки:   !    ?    #    @    _    ~

13.4. Структура  „Prolog”- программы

Prolog- программа  включает следующие разделы:

1) constans – объявление атомов-констант (раздел не обязательный);

2) domains – объявление типов данных для аргументов предикатов;

3) global domains - объявление глобальных типов данных (раздел не обязательный);

4) database - объявление предикатов динамической базы знаний (раздел не обязательный);

5) global database объявление предикатов глобальной динамической базы знаний (раздел не обязательный);

6) predicates - объявление предикатов;

7) global predicates - объявление глобальных предикатов (раздел не обязательный);

8) goalопределение компилятором цели запроса (целевого утверждения); при отсутствии в программе этого раздела пользователь вводит запрос самостоятельно;

9) clausesопределение правил (текст программы).

Для ввода и вывода информации в процессе работы программы используются следующие стандартные предикаты ввода-вывода:

  •  readint (X),   readreal (X),   readln (X) – ввод с текущего устройства ввода соответственно целых, действительных  чисел и символов;
  •  write ( Зн1, Зн2, Зн3,…) вывод значений констант или переменных Зн1, Зн2, Зн3,… на текущее устройство вывода;
  •  nl – перевод выходного потока на следующий рядок текущего устройства вывода.

13.5. \\Внутренняя база данных „Prolog”- программы\\

Факты и правила, представленные в виде предикатов и объявленные в разделе database, составляют внутреннюю базу данных (ВБД) Prolog- программы.  Предикаты  ВБД  нельзя одновременно объявить в разделе  predicates  и использовать их как заголовки правил программы.

\\Основными стандартными предикатами для работы с ВБД являются:

а) consult (Имя_файла) – дополнить ВБД другой базой данных, находящейся в файле с именем  Имя_файла;

б) save (Имя_файла) –сохранить ВБД в файле с именем  Имя_файла;

в) assert (Факт) – дополнить ВБД новым фактом  Факт;

г) retract (Факт) – исключить факт Факт из  ВБД.

13.6. Организация запросов\\

Задача  „Prolog”- программы состоит в определении значений аргументов, входящих в состав целевого утверждения, который согласуется с одной из аксиом базы знаний. Это утверждение с точки зрения компилятора Prolog- программы является запросом, который необходимо ввести в диалоговое окно после сообщения  Goal, либо записать как часть текста программы в разделе  goal.

\\Простой запрос\\ состоит из имени предиката, за которым в скобках указан список аргументов. Если аргументами являются константы, то компилятор выдает ответ  "Yes" или "No". Если в запрос входят переменные, то компилятор пытается найти все такие их значения, при которых запрос будет истинным. Если нужное значение переменной не найдено, компилятор выдает сообщение  "No Solution". Если в запрос входит анонимная переменная (_), то это равносильно приказу компилятору пренебречь значением аргумента.

Использование константы как аргумента в предикате запроса дает возможность задать входные данные программы (до начала ее работы), а  использование переменной – получить выходные данные после окончания работы программы.

\\Сложенный запрос\\ создается из нескольких простых запросов (подцелей), соединенных между собой  запятой ",", что означает логическое  "и" ("and" &)  или  точкой с запятой ";", что соответствует логическому "или" ("or"   ).

\\13.7. Работа  „Prolog”- программы

В соответствии со структурой логической базы знаний (Лекция №7) „Prolog”-программа предназначена для обработки логических предложений, которые могут быть фактами, правилами или запросами пользователей. В конце предложения обязательно ставится точка.

Факт описывает отношения между конкретными объектами и представляет собой предикат, аргументами (термами) которого являются константы.

В отличие от традиционных процедурных языков программирования, включающих множество различных операторов, „Prolog”-программа имеет в своем составе лишь один вид оператора – правило ( в разделе clauses), которое записывается в виде упорядоченной последовательности структур:

утверждение-вывод :-  условие 1,  условие 2, … условие n.

Формальная запись правила интерпретируется так: "утверждение-вывод является истинным, если одновременно истинны утверждения  условие 1, условие 2,…условие n".

В основу „Prolog”-программы положен алгоритм линейной резолюции (Лекция №8). В соответствии с этим методом основной операцией, выполняемой в „Prolog”-программе, является операция сопоставления утверждений (подцелей) запроса с аксиомами (фразами Хорна) логической базы знаний. Эта операция осуществляется следующим образом:

а) число сопоставляется только с равным ему числом;

б) атом сопоставляется только с равным ему атомом;

в) переменная сопоставляется с чем угодно и при сопоставлении получает то значение, с которым оно сопоставляется;

г) структура сопоставляется с другой структурой, если они имеют одинаковые функторы и арность  при условии, что все их аргументы попарно сопоставляются.

Prolog”-программа задает порядок просмотра альтернативных аксиом базы знаний, располагая их в определенном порядке. Для выполнения совокупности подцелей, которые составляют запрос, программа берет первую подцель и пытается доказать ее истинность. Просматриваются все факты и правила базы знаний, которые сопоставляются с подцелью. Если факт найдено, то истинность подцели считается доказанной и берется следующая подцель. Если найдено соответствующее правило, то программа пытается доказать истинность его утверждений.

Prolog”-программа находит все возможные варианты решенияй, число которых указывается как "N Solutions". Если найдено несколько вариантов, то программа автоматически отмечает так называемую точку возврата Если очередная подцель не может быть выполнена, то осуществляется возврат (back tracking) к последней отмеченной точке возврата и программа пытается найти другой путь поиска решения. Если истинность доказываемого утверждения (теоремы) не может быть определена на основе фактов и правил программы, то программа выдает сообщение "No Solution".

В случае необходимости работу механизма возврата можно остановить, используя так называемое отсечение бесперспективных вариантов поиска решения. Это осуществляется путем применения предиката "!", который дает указание компилятору не возвращаться назад дальше той точки, где стоит этот предикат. Он используется также, если нужно получить только один ответ на запрос с переменными.

13.8. „Prolog”- машина

Решение практических логических задач с использованием логического вывода на знаниях (Лекция №8) осуществляет программно-аппаратное устройство (решатель), которое называется Prolog”-машиной. Механизм ее работы обеспечивает поиск решения поставленной задачи (запроса пользователя) на основе сопоставления альтернативных утверждений и декларативного возврата из тупиков (back tracking).

Главной функциональной частью „Prolog”-машины является Prolog”-программа. В состав „Prolog”- машины входят также стеки и регистры, в которых запоминаются ее состояния, соответствующие точкам ветвленияProlog”- программы.

Prolog”- машина эффективна при решении логических задач, имеющих небольшое число (до сотни) правил и альтернативных вариантов. При их увеличении время решения задач существенно возрастает в связи с необходимостью проверки новых правил на непротиворечивость со старыми правилами.

Prolog”- машины  выпускаются фирмами США и Японии. „Prolog”- машина была положена в основу интеллектуального компьютера, созданного в рамках японского проекта "ЭВМ пятого поколения".

13.9. Система программирования „Turbo-Prolog

Эффективная работа с Prolog-программой, использование графических конструктивов и диалоговый режим с пользователем могут быть осуществлены в системе (среде) программирования Turbo-Prolog. Рассмотрим основные возможности системы „Turbo-Prologверсии 2.0.

После запуска системы (файл  prolog.exe)  и сообщения об инициализации системы на экране появляются главное меню и четыре окна:

  •  редактирование – ввод текста программы;
  •  диалог – ввод запросов и выдача результатов;
  •  сообщения – выдача сообщений компилятора;
  •  трассировка – выдача информации о ходе  выполнения программы.

Команды главного меню представлены в табл.13.1.

Табл.13.1. Команды главного меню системы „Turbo-Prolog

Команды

Функции

Меню

Операции

File

Управление файлами

Load

Загрузка файла для обработки

Pick

Вывод списка файлов данного сеанса работы

New file

Очистка окна и редактирование новой программы

Save

Сохранение файла в рабочем каталоге

Write to

Запись в файл текста программы

Directory

Выбор логического устройства и каталога

Change dir

Изменение текущего каталога

OS shell

Вызов операционной системы

Edit

Создание и модификация текста программы

Run

Выполнение программы

Compile

Компиляция программы

Options

Установка параметров

Link options

Установка связей при компиляции

Edit PRJ file

Режимы редактирования файла

Compiler directives

Директивы компилятора

Setup

Изменение параметров системы

Colors

Определение цвета элементов окон и главного меню

Window size

Установка размера и размещения окон

Directories

Определение рабочих каталогов

Miscellaneous

Функции служебных клавиш экрана, клавиатуры и др.

Load SYS file

Загрузка файла SYS с параметрами

Save SYS file

Запись текущих параметров в файл SYS 

Графические и цветные режимы работы системы „Turbo-Prolog” регулируются путем использования служебных предикатов и их параметров, представленных в табл.13.2:

Табл.13.2. Графические режимы работы системы „Turbo-Prolog”

Предикаты

Функции

Параметры

Значения параметров

graphics

Создание графического изображения

Mode

Разрешающая способность видеоадаптера

Palette

Выбор цветной палитры

Color

Выбор цвета заливки

makewindow

Установка параметров  графического изображения

Window_number

Номер окна

Screen_attribute

Цвет текста и заливки

Frame attribute

Рамка окна и ее цвет

Frame string

Название окна

Starting_row

Верхняя строчка окна

Starting_column

Левая граница окна

Window_height

Нижняя строчка окна

Window_width

Правая граница окна

Dot

Определение положения точки

Row

Строчка

Column

Столбец

Palette_color

Цвет точки

Line

Определение положения линии

Row_1

Положение левой точки линии

Column_1

Row_2

Положение правой точки линии

Column_2

Palette_color

Цвет линии

13.10. Язык "Concurrent Prolog"

Одним из наиболее распространенных диалектов (расширений) логического языка "Prolog" является "Concurrent Prolog", предназначенный для параллельного программирования логических систем. В соответствии с тремя основными логическими операциями, к числу которых относятся унификация, конъюнкция ("и", "and") и дизъюнкция ("или", "or"), в языке "Concurrent Prolog" имеются три возможных способа параллельной обработки знаний:

а) параллельная унификация, при которой могут параллельно обрабатываться (сопоставляться) параметры (термы) отдельных утверждений (предикатов) альтернативных предложений;

б) "и" ("and") –параллельность, при которой утверждения тех или иных предложений, объединенные логической операцией "и", могут обрабатываться независимо друг от друга, если они не содержат совместных свободных переменных;

в) "или" ( "or") –параллельность, при которой несколько утверждений, относящихся к одному и тому же предложению, могут обрабатываться одновременно.

В языке "Concurrent Prolog" имеется Commit-оператор, который разделяет утверждения  логического предложения на две группы:  Guard  и  Body:


A   
   G1 … Gm        |        B1 … Bn   ( m, n > 0)

Goal        Guard     Commit    Body

где  А –запрос;  G1m – утверждения группы  Guard;  B1…Bn – утверждения группы Body.

Применение "or"– параллельности допускается только в пределах группы Guard. Первая успешно обработанная группа Guard выполняет Commit-операцию и останавливает ею все другие "or"– параллельные процессы.

Группа Body обрабатывается "i"–параллельно в пределах, допустимых с точки зрения синхронизации взаимозависимых предложений-процессов, которая обеспечивается с помощью так называемых "read-only"-переменных, обозначаемых знаком вопроса "?". Процесс, обратившийся с целью чтения к "read-only"-переменной, которая в этот момент еще не определена, блокируется до тех пор, пока эта переменная не получит определение от другого предложения-процесса.

13.4. Примеры использования базовых версий языка „Prolog

Пример №13.1. Рассмотрим пример программы построения базы знаний экспертной системы (ЭС) (Лекция №5) с использованием логической модели представления  знаний. В соответствии с основными положениями Лекции №7 „Prolog”-програму построения логической базы знаний можно представить в следующем виде:

domains % Типы данных:

sml,  vrt,  ktr,  tnk,  grz,  tks  = symbol

kls,  vnt,  krl,  vgr  = symbol

x, y  = symbol

predicates % Предикаты:

P(x, y),  Q(x),  R(y)

clauses  % Правила (фразы Хорна):

not P(sml, kls);  not P(sml, vnt);  not P(sml, krl);  not P(sml, vgr);  Q(sml).

not P(vrt, kls);  not P(vrt, vnt);  not P(vrt, vgr);  Q(vrt).

not P(ktr, vnt);  not P(ktr, vgr);  Q(ktr).

not P(tnk, vnt);  not P(tnk, vgr);  Q(tnk).

not P(grz, kls);  not P(grz, vgr); Q(grz).

not P(tks, kls);  Q(tks).

not P(sml, kls);  not P(vrt, kls);  not P(grz, kls); not P(tks, kls);  R (kls ).

not P(sml, vnt); not P(vrt, vnt); not P(ktr, vnt);  not P(tnk, vnt);  R (vnt ).

not P(sml, krl);  R (krl ).

not P(sml, vgr);  not P(vrt, vgr);  not P(ktr, vgr);not P(tnk, vgr)); not P(grz, vgr);  R (vgr ).

Пример №13.2. „Prolog”-программа построения базы знаний ЭС с использованием семантической модели представления  знаний (Лекция №9) имеет вид:

domains % Типы данных:

объект  = symbol

объекты = string

свойства = string

транспорт_средства  = symbol

самолет, вертолет, катер, танкер, грузовик, такси = string

колеса, винт, крыло, грузы = string

predicates % Предикаты:

имеет_частью (объекты, объект )

имеет_свойство (свойства, объект)

clauses   % Правила:

имеет частью (самолет, вертолет, катер, танкер, грузовик, такси, транспорт_средства).

%  Связь базы данных с базой знаний

имеет_свойство ("колеса", "винт", "крыло", "грузы ", "Самолет").

имеет_свойство ("колеса", "винт", "  ", "грузы ", "Вертолет").

имеет_свойство ("  ", "винт", "  ", "грузы ", "Катер").

имеет_свойство ("  ", "винт", "  ", "грузы ", "Танкер").

имеет_свойство ("колеса", "  ", "  ", "грузы ", "Грузовик").

имеет_свойство ("колеса", "  ", "  ", "  ", "Такси").

Пример №13.3. „Prolog”-программа построения базы знаний ЭС с использованием фреймовой модели  представления  знаний (Лекция №10) имеет вид:

domains  % Типы данных:

Фрейм, имя_фрейма, имя_слота, транспорт_средства  = symbol

фреймы = string

значения_слота  = string

самолет, вертолет, катер, танкер, грузовик, такси = string

колеса, винт, крыло, грузы = string

predicates % Предикаты:

структура (фреймы, Фрейм)

фрейм (имя_фрейма, имя_слота, значения_слота)

clauses   % Правила:

структура (самолет, вертолет, катер, танкер, грузовик, такси, транспорт_средства).

% Связь базы данных с базой знаний

фрейм ("Самолет", имеет, "колеса", "винт", "крыло", "грузы ").

фрейм ("Вертолет", имеет, "колеса", "винт", "  ", "грузы ").

фрейм ("Катер", имеет, "  ", "винт", "  ", "грузы ").

фрейм ("Танкер", имеет, "  ", "винт", "  ", "грузы ").

фрейм ("Грузовик", имеет, "колеса", "  ", "  ", "грузы ").

фрейм ("Такси", имеет, "колеса", "  ", "  ", "  ").

Пример №13.4. „Prolog”-программа построения базы знаний ЭС с использованием продукционной модели представления знаний (Лекция №11) имеет вид:

domains % Типы данных:

sml,  vrt,  ktr,  tnk,  grz,  tks  = symbol

kls,  vnt,  krl,  vgr  = symbol

x, y  = symbol

predicates % Предикаты:

P(x, y),  Q(x),  R(y)

clauses   % Правила:

Q (sml) :- P(sml, kls), P(sml, vnt), P(sml, krl), P(sml, vgr).

Q (vrt). :- P(vrt, kls), P(vrt, vnt), not P(vrt, krl), P(vrt, vgr).

Q (ktr) :- P(ktr, kls),  P(ktr, vnt), not P(ktr, krl), P(ktr, vgr).

Q (tnk) :- not P(tnk, kls), P(tnk, vnt), not P(tnk, krl), P(tnk, vgr).

Q (grz) :- P(grz, kls), not P(grz, vnt), not P(grz, krl), P(grz, vgr).

Q (tks) :- P(tks, kls), not P(tks, vnt), not P(tks, krl), not P(tks, vgr).

R (kls ) :- P(sml, kls), P(vrt, kls), not P(ktr, kls), not P(tnk, kls), P(grz, kls), P(tks, kls).

R (vnt ) :- P(sml, vnt), P(vrt, vnt), P(ktr, vnt), P(tnk, vnt), not P(grz, vnt), not P(tks, vnt).

R (krl ) :- P(sml, krl), not P(vrt, krl), not P(ktr, krl), not P(tnk, krl), not P(grz, krl), not P(tks, krl).

R (vgr ) :- P(sml, vgr); P(vrt, vgr), P(ktr, vgr), P(tnk, vgr); P(grz, vgr), not P(tks, vgr).

Пример №13.5. Рассмотрим пример Prolog-программы решения задачи ЭС (Лекция №5) в среде программирования "Turbo-Prolog" версии 2.0. Задача ЭС (запрос пользователя) состоит в определении названия объекта (из перечисленных в базе данных) с такими свойствами: имеет колеса, не имеет винта, не имеет крыльев, возит грузы. В соответствии с материалами Лекций №5 и №12 „Prolog”- програму решения задачи ЕС можно представить в следующем виде:

/* Transport.pro */

domains  % Типы данных:

колеса, винт, крыло, грузы, тcредство = string

database  % Предикаты внутренней  базы знаний

базтранспорт (колеса, винт, крыло, грузы, тcредство)

predicates % Предикаты:

repeat %  Повтор

do_mbase

assert_database

clear_database

транспорт (колеса, винт, крыло, грузы, тcредство)

process (integer)

goal  % Запрос:

do_mbase

транспорт ("1", "0","0","1", "Тcредство")

clauses  %            Правила:

repeat.

%  Связь базы данных с базой знаний

транспорт ("1", "1","1","1", "Самолет")

транспорт ("1", "1","0","1", "Вертолет")

транспорт ("0", "1","0","1", "Катер")

транспорт ("0", "1","0","1", "Танкер")

транспорт ("1", "0","0","1", "Грузовик")

транспорт ("1", "0","0","0", "Такси")

assert_database :-  %   дополнить внутреннюю базу данных (ВБД)

транспорт (Колеса, Винт, Крыло, Грузы, Тcредство),

assert_(базтранспорт (Колеса, Винт, Крыло, Грузы, Тcредство)),

fail.

assert_database :-!.

clear_database :-

retract (базтранспорт ( _, _, _, _, _ )),  %  исключить из ВБД

fail.

clear_database :-!.

do_mbase:-

assert_database :-!.

clear_database.

clearwindow,  %   открыть диалоговое окно

nl, nl, nl, nl,

% Создание интерфейса пользователя (вопросник)

readint (Choice), nl,

process (Choice),

removewindow.

process (1) :-

write ( "1 – Да" ), nl,

write ( "0 – Нет" ), nl,

write ( "Объект имеет Колеса?"),

readln (Колеса), nl,

write ( "Объект имеет Винт?"), nl,

readln (Винт), nl,

write ( "Объект имеет Крыло?"), nl,

readln (Крыло), nl,

write ( "Объект возит Грузы?"), nl,

readln (Грузы ),

базтранспорт (Колеса, Винт, Крыло, Грузы, Тcредство), nl,

write ( "Искомый объект -Тcредство"),

nl, nl, !, nl,

removewindow.  %   закрыть диалоговое окно

process (1):- nl,

write ( "Искомый объект не найден"),

readchar (_),

removewindow.

Пример №13.6. Рассмотрим пример программы вычисления скалярного произведения двух векторов ( [1,2,3] и [4,5,6] ) на языке "Concurrent Prolog" (каждый оператор записывается в отдельной строке):

Вызов программы:  s_prod ( [1,2,3], [4,5,6], SP).    SP=32

s_prod ( [ ], [ ], 0 ):- |  s_prod ( [H1 |  T1], [H2 |  T2 ], X ):- |

X:= H1* H2 + Rest?,   s_prod ( T1?, T2?, Rest ).

В этом примере Commit-оператор ( | ) предотвращает ненужный поиск альтернативного предложения (ограничение "or"– параллельности), поскольку в программе нет предложений с одинаковым заголовком. Оба предложения (присвоения и рекурсивного вызова) выполняются параллельно, причем операция присвоения должна подождать, пока ее переменная синхронизации  Rest? не примет числового значения от рекурсивного вызова процедуры s_prod.


 

А также другие работы, которые могут Вас заинтересовать

15011. Алғашқы қазақ газеттерінің тарихы 39.5 KB
  Алғашқы шығарылған қазақ газеттерінің тарихы. Кез келген әдебиет бір күннің төңірегінде өрбитін немесе белгілі бір тарихи кезеңнің оқиғасын баяндайтын тар ұғымды дүние емес. Мәдениеті бай елдердің әдебиеті де қаз тұрып қалыптасқанша қоғамның дамуы секілді т
15012. Алпамыс батыр дастанының зерттелуі 560 KB
  УДК 398.22 574 А 61 АЛПАМЫС БАТЫР ЖЫРЫНЫЊ ЗЕРТТЕЛУІ А. Аманбаева А. Мќашева Тараз мемлекеттік педагогикалыќ институты Тараз қ. Батырлар жыры ќазақ ауыз әдебиетінің өте ертеден келе жатқан күрделі саласының бірі. Батырлар жыры бір ғасырдың ғана жемісі емес.Ол...
15013. Алпамыс батыр жырын оқыту және тәрбие жұмыстары 42.5 KB
  ӘОЖ 373.371.83 АЛПАМЫС БАТЫР ЖЫРЫН ОҚЫТУ АРҚЫЛЫ ТӘРБИЕ ЖҰМЫСТАРЫНЫҢ ҚҰЗЫРЕТТІЛІГІН АРТТЫРУ З.Д. Көшімбетова Қ.А. Яссауи атындағы Халықаралық қазақтүрік университеті Тараз институты Тараз қ. Алпамыс батыр жыры қазақ халқының ауыз әдебиетіне жатады және жыр...
15014. Арқалық батыр жырының нұсқалары 230.5 KB
  Тақырыптың өзектілігі. Қазақ халқының кез келген халықтың эпикалық қазынасынан кем түспейтін телегей-теңіз мол, әрі көркемдігі кемел, танымдық-тағылымдық мәні зор жырларының басым көпшілігі, әлі де болса
15015. Асан Қайғы туралы аңыздар 176.5 KB
  Ұлттың рухы бейнеленген мұра халықтың асыл қазыналарының бірі екендігін тәуелсіздік мұраты жолында жаңа экономикалық және саяси-әлеуметтік реформаларды қарқынды...
15016. Ахмет Байтұрсынұлының Әдебиет танытқыш еңбегі ХХ ғасыр басындағы әдебиеттану ғылымының контексінде 190.5 KB
  ЖҰМЫСТЫҢ ЖАЛПЫ СИПАТТАМАСЫ Диссертациялық жұмыста ірі энциклопедист ғалым қазақ әдебиеттану ғылымындағы әдебиет теориясының негізін салушы Ахмет Байтұрсынұлының – сөз өнерінің теориялық сипаты жөніндегі тұжырымдары талқыланып отыр. Ол тұжырымдар ғалымның 1926 жыл
15017. БАУЫРЖАН МОМЫШҰЛЫ ШЫҒАРМАЛАРЫНДАҒЫ АБАЙ ДӘСТҮРІ 72 KB
  БАУЫРЖАН МОМЫШҰЛЫ ШЫҒАРМАЛАРЫНДАҒЫ АБАЙ ДӘСТҮРІ Даурбекова Ширинкуль Седазымқызы Б. Момышұлы атындағы №44 орта мектеп. Шымкент қаласы Туады ерлер ел үшін Өлмейді ісі мәңгілік Өшпейді абзал есімдер. Ұрпаққа жетіп м
15018. Балалар әдебиеті кейіпкерлерінің тілдік тұлғасы (Б.Соқпақбаев, М.Гумеров, М.Қабанбаевтың шығармалары бойынша) 191 KB
  КІРІСПЕ Жұмыстың өзектілігі. Қазақ балалар әдебиеті өз даму кезеңінде өзіндік тарихы бар сала. Балаларға арналған әдебиет ұлт тарихында сонау ауыз әдебиетінен бастау алып қазіргі кезеңге дейін өзінің тілдік стильдік жағынан мазмұны мен құрылымы жағынан үлкен б
15019. БАТЫРЛАР ЖЫРЫ МЕН «ШАҺНАМА» ДАСТАНЫНДАҒЫ ТАҚЫРЫП ҮНДЕСТІГІ 55 KB
  Батырлар жыры мен Шаһнама дастанындағы тақырып үндестігі Ж. Қ. Әбдібаева Қ.Жұбанов атындағы Ақтөбе мемлекеттік университеті Ақтөбе қ Көркемдік дамудыңәдеби процестің маңызды бір заңдылығыәдеби байланыстарәдебиет әлеміндегі тоғысулар мен қарымқатынаста