Алгоритмический язык Бейсик

Язык Basic – язык. программирования, ориентированный на обучение основам программирования.

Программа на Basic – последовательность пронумерованных операторов и комментариев.

Структура программы:

Основные правила записи алгоритма на языке Basic:

1. В программе на языке Бейсик операторы (предписания, действия) записываются построчно. В одной строке может быть один или несколько операторов. Операторы в одной строке отделяются двоеточием.

2. Строки должны быть пронумерованы. Желательно задавать номера строк с пропусками для того, чтобы при необходимости, можно было до­бавить новые строчки. Максимальный номер строки зависит от версии ин­терпретатора и не превышает 32767.

3. Программу не обязательно набирать в порядке возрастания номеров строк, их упорядочение произведет интерпретатор,

4. Алфавит Бейсика:

- 26 латинских букв.

- цифры от 0 до 9.

- точка (для отделения целого от дробного в написании чисел).

- запятая - является разделителем.

- кавычки используются в диалоге.

- знаки арифметических операций (+, -, /, *, А).

- знаки отношений двух величин (<, >, =, >=, <=, о).

- скобки и др.

5. Числа задаются в естественном виде, целое от дробного отделяется точкой. Порядок числа указывается после буквы Е (Например. 1.5Е-05)..

6. Переменные Бейсика делятся на:

- простые (А, Р, КР, А2).

- индексированные (А(4,5), В6(20), Х$(12)).

Имена переменных должны начинаться с латинской буквы. Считается хорошим стилем программистов, если имя переменной напоминает о вели­чине, которую она представляет. Нельзя использовать в качестве имен за­резервированные слова Бейсика.

7. Операторы - предписания для обработки информации записываются латинскими буквами без пробелов в словах (PRINT, INPUT).

8. Кроме программных операторов интерпретатор Бейсика имеет слу­жебные операторы - директивы - команды, исполняемые сразу после ввода.

Номер у них не ставится. Чаще других используются: NEW, RUN, CLS, LIST, SYSTEM, FILES, SAVE..., LOAD....

9. Синтаксис Бейсика допускает расположение операторов-описаний (например, операторов размерностей и определения функций) в любом месте программы. Главное, чтобы соответствующие объекты были описа­ны до того, как они встретятся в выполняемых операторах. Если в про­грамме есть подпрограммы, то в принципе они могут располагаться в лю­бом месте.

При написании программы желательно не злоупотреблять той «свобо­дой», которую предоставляет синтаксис Бейсика. Лучше располагать все описания в начале программы, а подпрограммы в конце, после оператора завершения программы.

Структурно оператор состоит из:

номера оператора названия оператора содержания оператора признака конца

Идентификаторы:

Идентификаторы — основа любого языка. Под идентификаторами понимаются имена констант, переменных, элементов управления, процедур и методов объектов.

В Basic существует следующие правила составления идентификаторов:

1. Первый символ идентификатора обязательно является буквой или символом подчеркивания (Например, идентификаторы First, _Var являются правильными, а 1st, 100 — неправильными).

2. В середине или на конце идентификатора допускается использовать цифры (например - A1, A1B2 и др.).

3. В идентификаторах не допускается использовать пробелы, а также специальные символы: знаки препинания, а также @, #, $, & (Идентификаторы My Var, New& - являются неправильными).

4. Максимальная длина идентификатора не может превышать 255 символов.

5. Идентификатор не может совпадать с зарезервированными словами языка программирования Basic

6. В пределах одного модуля или проекта недопустимо объявлять один и тот же идентификатор дважды.

Переменные:

Типы данных должны быть заданы для того, чтобы транслятор мог размес­тить их в памяти. В различных ЭВМ такое размещение осуществляется по-разному.

Бейсик допускает строго определенные типы данных. Тип определяется для чисел, переменных, функций.

Для описания типа некоторой переменной существует два способа:

1. В конце имени ставится определенный символ.

2. С помощью оператора DEF...

Структура оператора DEF

DEF тип буква[-буква][,буква]

«тип» - может быть одним из следующих буквенных сочетаний:

1. INT (integer) – целое.

2. SNG (single precision) - одинарная точность.

3. DBL (double precision) - двойная точность.

4. STR (string)-строка.

«буква» - это любая из букв английского алфавита A-Z. Оператор DEF указывает Бейсику то, что все переменные, начинаю­щиеся с одной из перечисленных букв, будут иметь тип, заданный в клю­чевом слове оператора.

Переменные целого типа: целыми числами являются числа от -32768 до +32767 и не содержат десятичной точки, так как компьютер не оставляет места под дробную часть. Занимают 2 байта памяти. Арифметические действия над целыми числами выполняются быстрее, чем над другими числами.

Переменные целого типа можно описать с помощью знака процента (%). Например: Р%, К3% и т.д.

Вещественные переменные одинарной точности - может быть любое число, которое не является целым и содержит 7 или менее цифр, записыва­ется в экспоненциальной форме с символом Е, занимает 4 байта памяти, точность составляет до 7-ми десятичных цифр, но только шесть будут представлены точно, седьмая округляется. Диапазон чисел от -1.701412Е+38 ДО+1.701412Е+38.

Переменные данного типа в конце имени могут содержать восклица­тельный знак (!). Например: Р!. КЗ! и т.д.

Вещественные переменные двойной точности: вещественными переменными двойной точности могут быть любые числа, имеющие 8 или более цифр. Записываются эти числа в экспоненци­альной форме с буквой D. Занимают 8 байт памяти, точность составляет до 16-ти десятичных цифр.

Переменные данного типа в конце имени могут иметь знак #.

При составлении арифметических выражений, в которых в качестве операндов могут фигурировать данные, как целого, так и вещественного типов, следует руководствоваться следующими правилами:

1. Арифметические операции могут выполняться над смешанными операндами любого из трех числовых типов. Реальная точность мо­жет оказаться не выше точности самого неточного операнда.

2.Следует запомнить, что символ типа в имени переменной важнее оператора DEF.

3. Операции одного приоритета выполняются последовательно слева направо. Исключение составляет операция возведения в степень, которая выполняется справа налево.

4. Выражения могут содержать одновременно операнды целого и вещественного типов. При этом операции над данными одного типа дают результат этого же типа. Если хотя бы один из операндов вещественного типа, результат - вещественный.

5. Если в операторе присваивания тип выражения и тип переменной в левой части не совпадают, то результат автоматически преобразуется к типу переменной.

Операторы:

Описание типов и массивов в Бейсик:

s$, p$, sl$, pr$ - символьные;

n%, m%, n1%, m3% - целочисленные;

x!, y!, x1!, y5! – вещественные;

a#, b#, a1#, b8# - вещественные двойной точности.

Операторы описания типов переменных в В.:

def str p, q, s – символьные;

def int n, m, l – целочисленные;

def sng x, y, z – вещественночисловые;

def dbl a, b, c – вещественные двойной точности.

Оператор описания массивов DIM – служит для описания одномерных и двумерных массивов

Описание массивов:

одномерные 30 dim fm$(20), nm$(20), r(20)

двумерные 40 dim ms(10, 10)

Обращение к массивам: fm$(4)=”Егоров”, r(4)=r(3)+10

Описание данных: 10 data “Иванов”, “Саша”, 180, 80

20 data “”, “”, 0, 0

Оператор ввода блока данных DATA,

Оператор считывания данных из блока READ,

Оператор восстановления блока данных RESTORE.

Операторы чтения данных: read fm$(1), nm$(1), r(1)

Операторы чтения данных сначала: restore – чтение сначала.

Операторы повторного чтения данных, начиная с 10: restore 10 – чтение с 10 оператора.

Оператор ввода данных с клавиатуры – INPUT.

Комментарий REM.

Оператор вывода результатов PRINT – служит для обработки информации и вывода результатов в виде численных значений переменных, а также текста, который записывается в кавычках.

Операторы организации подпрограмм GOSUB – служит для обращения к подпрограмме, RETURN – служит для завершения подпрограммы и обеспечивает возврат в то место основной подпрограммы, из которого произошло обращение к подпрограмме.

Обработка одномерных и двумерных массивов:

Массивом называют упорядоченную последовательность величин, обо­значаемую одним именем. Именем массива может быть любое допусти­мое в Бейсике имя.

Данные, являющиеся элементами массива, располагаются в последова­тельных ячейках памяти. Это означает, что массив занимает непрерывную область памяти.

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

Массивы принято объявлять в программе с помощью оператора DIM с именем, в скобках указывается верхняя граница индексов. Значение этого числового выражения, записанного в скобках, будет определять макси­мальный размер массива.

Максимальное число элементов в любом массиве в БЕЙСИКЕ зави­сит от версии и не может быть больше числа 32767. Нижняя граница по умолчанию в некоторых версиях равна нулю или равна единице — в дру­гих. Массивы могут быть числовые и символьные (например, DIM Y(21), F$(5), C2$(23)).

Наиболее мощное средство при работе с массивами - возможность представления индекса переменной или сложным выражением.

Надо только предусмотреть, чтобы значение индекса всегда удовлетво­ряло заданному размеру массива; т.е. программа не должна пытаться обра­титься к элементам, номер которых меньше 0 или больше заданного в описании размера массива.

В Бейсике любая обработка массивов, а также ввод-вывод осущест­вляются поэлементно с использованием алгоритма циклической структуры, где в качестве параметра цикла используется значение индекса элемента массива.

Основные правила при работе с массивами.

1. Рекомендуется описание массивов делать в начале программы - это необходимо для улучшения структуры программы и для избежания оши­бок. Если оператор описания массива отсутствует, то по умолчанию макси­мальное значение индекса равно 10 (то есть количество элементов в одномерном массиве = 10, а в двухмерном = 100(10*10)). Надо помнить – явное описание массивов экономит память ЭВМ.

2. Нежелательно использовать в объявлении массива имя простой пе­ременной, присутствующей в программе.

3. Программа не должна пытаться обратиться к элементам массива, но­мер которых меньше 0 или больше заданного в описании размера массива.

4. Индекс не может быть не целым числом. Максимальное значение индекса не должно превышать 32767.

5. Элемент числового массива имеет значение 0 с момента, когда мас­сив определен, и до того, как Он получит какое - то другое значение.

ДВУМЕРНЫЕ МАССИВЫ:

Матрицами называют двухмерный массив чисел вида:

Матрица характеризуется размерностью m * n, т.е. произведением числа строк на число столбцов.

Размер матрицы устанавливается оператором DIM, где указывается имя матрицы и в круглых скобках верхние границы изменения индексов, которые должны быть целыми положительными числами (например: DIM A(7,4), FIO$(5,9)).

В Бейсике могут использоваться массивы как числовые, так и сим­вольные.

Под двухмерный массив выделяется линейный участок памяти, в кото­ром массив располагается по строкам.

а11 а12 а1n а21 а22 а2n am1 am2 amn

В Бейсике не определены операции над двухмерными массивами, поэтому любая обработка матриц, а также ввод-вывод осуществляется по­элементно.

УПОРЯДОЧЕНИЕ МАССИВОВ (СОРТИРОВКА ),

Сортировкой является такая перестановка элементов (в массиве), после которой они оказываются упорядоченными требуемым образом.

Общую задачу сортировки данных в массиве можно свести к выбору методов, каждый из которых требует различного времени исполнения и использует различное число дополнительных ячеек памяти. При работе с массивом заданного размера приходится идти на компромисс между вре­менем исполнения и числом рабочих ячеек: чем быстрее надо выполнить сортировку, тем больше требуется рабочих ячеек.

Сортировка методом пузырька.

Этот метод очень прост; он практически не требует рабочих ячеек, но работает довольно медленно. Однако его легко понять и он может служить идеальным методом сортировки общего назначения в условиях, когда па­мять ЭВМ ограничена, а время исполнения не очень существенно. Этот метод основан на попарном сравнении смежных элементов дан­ных; если порядок следования элементов" в очередной паре неправилен, то эти элементы обмениваются местами. Для выполнения обмена требуется дополнительная переменная, сохраняющая на время обмена одно из зна­чений. Рассмотрим сортировку числовых значений в порядке убывания. Пере­менные I и J - индексы пары смежных значений.

Функции пользователя:

Помимо стандартных функций в программе можно определить и далее использовать другие (нестандартные) функции. В Бейсике имеется воз­можность вводить в текст программы определение новых функций и в дальнейшем обращаться к ним по имени в различных выражениях.

Определить функцию можно в любом месте программы с помощью специального оператора DEF.

Общий вид оператора: DEF FNv(x) = <арифметическое выражение> где v - имя функции латинская буква;

Х - формальный аргумент функции - простая переменная;

<Арифметическое выражение> - формула, по которой вычисляется функция.

Имена всех функций должны начинаться с FN.

Пример: определим функцию FNy(x) следующим образом: 10 DEF FNy(x) = COS(x) / SIN(x).

В соответствии с этим определением функция FNy(x) – это тригономет­рическая функция котангенс, отсутствующая среди встроенных в интер­претаторе языка Бейсик.

Оператор DEF можно использовать только в программном режиме. Параметр X, стоящий в определении, является формальным, необходимым для обозначения функциональной зависимости. При обращении к функции вместо него указывается фактический аргумент, который заменяет фор­мальный параметр. Например, после выполнения строки программы

20 PRINT FNy(2) будет напечатано значение котангенса для угла, равного 2 радианам,-.457658

Подпрограммы:

Когда некоторая совокупность действий должна выполняться в не­скольких местах программы, то обычно нежелательно каждый раз повто­рять группу операторов, реализующих эти действия.

Чтобы избежать повторений, указанную группу операторов можно за­писать в программе один раз и обращаться к ней, когда в этом возникает необходимость. Обособленную группу операторов, которую можно выпол­нять многократно, обращаясь к ней из различных мест программы, назы­вают подпрограммой.

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

Использование подпрограмм уменьшает общее количество операто­ров в программе, и, следовательно, для размещения программы требу­ется меньше памяти. Время на выполнение программы практически не из­меняется.

Подпрограммы обладают также некоторыми другими преимуществами:

1. Использование подпрограмм улучшает структуру программы.

2. Облегчается отладка программы, так как работа подпрограммы может быть проверена по отдельности.

3. Многие подпрограммы имеют дополни­тельную ценность, поскольку ими может воспользоваться не только тот, кто написал подпрограмму, но и другие.

В Бейсике подпрограмма оформляется как группа операторов, которая должна выполняться при обращении к ней, и составляет с программой единое целое.

Обращение к подпрограмме осуществляется оператором

GOSUB N где N -номер строки, с которой начинается подпрограмма.

Подпрограмма размещается в последовательных строках, начиная с N-ой. Последним оператором, выполняемым в подпрограмме, должен быть оператор RETURN. По оператору RETURN осуществляется возврат в то место программы, из которого произошло обращение к подпро­грамме, а именно к оператору, следующему за GOSUB N. Подпрограмма может содержать обращения к другим подпрограммам.

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

Тем не менее, будем условно разделять подпрограмму (функцию) и ос­тальные операторы. Последние назовем ОСНОВНОЙ или ВЫЗЫВАЮ­ЩЕЙ программой.

По отношению к каждой подпрограмме все переменные программы условно разделим на четыре группы: входные, выходные, внутренние, прочие.

Входные - это переменные, которым присваиваются значения исход­ных данных, необходимые для решения задачи, реализуемой данной подпрограммой.

Выходные - это переменные, в которых получаются результаты рабо­ты подпрограммы.

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

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

Внутренние переменные - это переменные подпрограммы, которые являются вспомогательными, т.е. не являются входными и выходными и использу­ются только в подпрограмме.

Прочие переменные - это все остальные переменные основной программы.

При использовании подпрограмм необходимо помнить следующее:

1. Перед обращением к подпрограмме всем ее входным переменным не­обходимо присвоить нужные значения.

2. В основной программе имя прочей переменной не должно совпадать с именем внутренней переменной подпрограммы, если эта прочая пере­менная не должна быть испорчена в процессе работы подпрограммы.

3. Подпрограмма не должна начать выполняться без обращения к ней.

На языке блок-схем подпрограммы изображаются отдельно от основ­ной программы. Подпрограммы имеют и начало, и конец, т.е. изображают­ся также как и основные программы.

Обращение к подпрограмме из основной имеет вид:

Пример использования подпрограммы для вычисления факториалов нескольких чисел.

10 КЕМ Вычисление 5! 6! 7! 8!

20 FORJ=5TO8

30 N=J

40 GOSUB1000

50 PRINT" ЗНАЧЕНИЕ ФАКТОРИАЛА"; N;" ="; F

60 NEXT J

70 STOP

1000 REM подпрограмма вычисления факториалов

1010 F=l

1020 FOR 1=1 TO N

1030 F=F*I

1040 NEXT I

1050 RETURN

Работа с файлами данных:

Работа с файлом осуществляется с помощью весьма ограниченного числа процедур. Сначала необходимо найти нужный ящик и выдвинуть его.

Эту операцию обычно связывают со словом "открыть". Затем мы про­изводим поиск и достаем интересующий нас документ, т.е. "читаем" затре­бованную неделимую порцию данных. Следующий шаг связан с изучением и обработкой информации, расположенной в соответствующих разделах документа.

Включение нового документа в файл соответствует процедуре "записи" поступившей порции данных.

По окончанию работы с очередным файлом мы ставим ящик на свое место или, как говорят, "закрываем" доступ к его информации.

Обращение к Файлу данных: Любая программа, обращающаяся к файлу данных, должна выполнить 3 операции над этим файлом.

1. Открыть файл.

2. Считать данные из файла, записать данные в файл или изменить данные в файле.

3. Закрыть файл.

Открытие файла файла в Бейсике выполняется оператором OPEN <имя файла> FOR <режим доступа> AS # <номер файла>,

где номер файла представляет собой целое выражение со значением в диа­пазоне от 1 до максимально допустимого числа одновременно открытых файлов (15).

Режим доступа: Открыть файл можно в одном из 3-х режимов доступа:

1. Для ввода данных из файла в оперативную память ЭВМ:

OPEN "M101.DAT" FOR INPUT AS #1.

Теперь из файла Ml 01.DAT можно только считать данные, начиная с первой записи.

Для ввода данных из файла в рабочую область памяти используется оператор INPUT # <номер файла>, < переменная [, переменная]... > Синтаксис этого оператора практически идентичен оператору INPUT, за исключением того, что нужно указать канал, по которому мы собираемся вводить данные. Оператор INPUT # просто считывает данные из файла, а не с клавиатуры, но данные из файла вводятся точно в такой же форме, в какой они должны были вводиться с клавиатуры (например - 120 INPUT #1, NOM, FAM$).

2. Для вывода данных в файл из оперативной памяти машины:

OPEN "M101.DAT" FOR OUTPUT AS #1.

Если файл открывается в режиме OUTPUT, то все содержимое этого файла (если такой имеется) пропадает, и можно записать в этот файл новые данные.

Сохранение данных из рабочей области памяти машины в файле дан­ных выполняется оператором PRINT # <номер файла>, < список выражений> (например -160 PRINT #l, NOM; ","; FAM$).

3. Для добавления данных в файл из оперативной памяти:

OPEN "Ml 01.DAT" FOR APPEND AS #1.

Когда файл открывается в режиме APPEND, то имеющиеся в нем дан­ные сохраняются и новые записываются после последней записи файла.

Если был открыт файл, то нужно его и закрыть. Для этого используется оператор

CLOSE [[# номер файла} [,номер файла]...]

Оператор CLOSE без параметров закрывает все файлы, которые к этому моменту программа успела открыть. Если в параметрах задан номер файла, то закрывается только файл с указанным номером канала. Закрытие файла имеет решающее значение: только после закрытия файла данные записываются на диск! Если вы забудете закрыть файл, то можете потерять данные! (например - 1000 CLOSE #1).

Маркер конца файла.

Для успешной работы программы нужно решить следующую проблему: как считать из файла все записи данных и вовремя остановиться. Где конец файла? Об этом заботится операционная система.

Когда, файл создается, то операционная система помещает после по­следней записи специальный символ, который называется маркером конца файла.

Программист должен предусмотреть в программе действия, которые надо выполнить при достижении конца файла, иначе попытки чтения будут продолжаться, и интерпретатор сообщит об ошибке "Input past and error" (Попытка чтения после конца файла).

Функция EOF.

В Бейсике имеется функция определения того, можем ли мы считать из файла еще какие-либо данные. Она называется EOF (End of file - Конец файла). Она имеет следующий синтаксис:

EOF {номер файла)

Эта функция истинна только тогда, когда достигнут конец файла, а ес­ли в файле еще остались данные, то она ложна.

Организация цикла. Программа ввода данных из файла в оперативную память должна выглядеть следующим образом: ПОКА НЕ КОНЕЦ ФАЙЛА

1. Прочитать запись.

2. Обработать запись.

3. Вывести информацию, если нужно. Функция EOF делает этот цикл очень простым.

29. ОСНОВНЫЕ ПОНЯТИЯ ЯЗЫКА ПРОГРАММИРОВАНИЯ ПРОЛОГ: ОБЪЕКТ, ПРЕДИКАТ, ТЕРМ, ФАКТ, ПРАВИЛО, УТВЕРЖДЕНИЕ, ЦЕЛЬ. МЕХАНИЗМ ДОКАЗАТЕЛЬСТВА ЦЕЛИ В ТУРБО-ПРОЛОГЕ. ВНЕШНИЕ И ВНУТРЕННИЕ ЦЕЛИ. СТРУКТУРА ПРОГРАММ ТУРБО-ПРОЛОГА. СОДЕРЖАНИЕ РАЗДЕЛОВ. ДОПУСТИМЫЕ ТИПЫ ДОМЕНОВ. ЛОГИЧЕСКИЕ ОПЕРАЦИИ В ПРОЛОГ-ПРОГРАММАХ.[63]

Пролог был разработан в1973 г. Аленом Кольмером в составе группы Марсельского Университета во Франции. Пролог декларативный (описательный) язык, язык формальной логики. Предназначен для моделирования процесса логических умозаключений человека. Требует особого мышления программиста и считается языком сверх высокого уровня.

Атом – набор символов латинского алфавита, начинающихся со строчной буквы, либо набор любых символов заключенных в “ ”.

Константа – либо атом, либо число.

Переменная – именуется набором латинских символов, цифр и символа подчеркивания, начинающимся с прописной буквы.

Если значение переменной не представляет интереса, ее имя заменяют символом подчеркивания и называют анонимной.

Терм (простой) – константа или переменная.

Терм (составной) – имеет имя и аргументы. learn (“Маша“, “Пролог“)

Имя терма может содержать 256 символов и обязательно начинаться с прописной буквы.

Встроенный предикат – процедура, входящая в систему программного обеспечения Турбо-Пролога.

Факт – простой или составной терм с аргументами, константами.

Факт – некоторое истинное утверждение, характеризующее объект или устанавливающее отношение между объектами.

Правило – составной терм, содержащий переменные в условиях (подцелях).

Правило – предложение, содержащие условия. В отличие от факта содержит переменные.

Заголовок (голова правила):- тело правила (голова истинна, когда истинно тело). learn («Коля», X):- learn («Маша», X).

Утверждения (предложения) – либо факт, либо правило.

Предикат – отношение между объектами. learn (“Маша“, “Пролог“)

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

Constants

Pi = 3.14

domains (раздел описания объектов)

имя объекта = тип объекта

predicates (раздел описания предикатов)

database (раздел описания динамических БД)

predicates (раздел описания предикатов).

clauses (раздел описания фактов и правил программы)

goal (раздел описания цели)

допустимые типы доменов:

integer – целое; real – действительное; char – одиночный символ; string и symbol – символьные; file – для работы с файлами.

Логические операции: часто для достижения цели одного условия в правиле бывает недостаточно, тогда используются составные условия, где несколько простых объединяются логическими операциями: «и» (.), «или» (;), «не» ().

Если в программе предполагается использовать динамические базы данных, то до раздела clauses появляется раздел описания динамической базы данных database.

В разделе predicates должны содержаться описания всех термов, встречающихся в разделе clauses, с указанием типов аргументов этих термов. В разделе clauses можно записывать фразы, которые представляют собой либо правила, либо факты.

Доказательство цели.

Цель в программе задается предикатом; объявляет, что должна доказать программа; используется для запуска программы на выполнение.

При доказательстве цели Пролог пытается ее сопоставить с фактами программы просматривая их сверху вниз и слева направо. Если цель содержит переменные, то пролог выдает их значения, которые приводят к решению.

Турбо-Пролог имеет внутренние подпрограммы для выполнения сопоставления и связанных с ним процессов. Они являются неотъемлемой частью языка и называются внутренними подпрограммами унификации. Эти подпрограммы выполняют унификацию (согласование) целей и подцелей с фактами и головами правил для того, чтобы вычислить эти цели или подцели. При этом сопоставляются имена предикатов целей и правила, количество объектов, значения конкретизированных переменных и аргументов.

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

В программе на Прологе утверждения для одного и того же предиката должны быть сгруппированы вместе, и этот участок программы называется процедурой.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: