Тема 2 Основные понятия языка prolog Часть 2 Преподаватель –Юлия Александровна Грачёва.

Презентация:



Advertisements
Похожие презентации
Тема 2 Основные понятия языка prolog Часть 2 Преподаватель –Юлия Александровна Грачёва.
Advertisements

Переменная - это величина, которая имеет имя, тип и значение. Значение переменной может меняться во время выполнения программы. В компьютерах каждая переменная.
Объектно-ориентированный язык программирования. Переменная - эта поименованная ячейка памяти, хранящая какое-либо одно значение (одно число, один фрагмент.
План-конспект урока (информатика и икт, 9 класс) по теме: Переменные:тип, имя, значение
LOGO Основные сведения о языке Бейсик Урок информатики в 10 классе Муниципальное образовательное учреждение «Средняя общеобразовательная школа 101» г.
Логическое программировыание Презентация 6 Операторы в Прологе.
Программирование Задания В2, В5. Оператор присваивания в языке программирования Задание В2 – базовый уровень, время – 2 мин.
Тема урока Переменная. Тип данных. Ввод и вывод данных.
Язык программирования Паскаль Учитель информатики: Иванчикова Т.Ф.
Теперь, когда вы постигли азы программирования, будем учиться писать программы, которые позволяют вести диалог между компьютером и человеком (пользователем).
Начала программирования Занятие 7. Вещественный тип данных. Вычисления по формулам. Арифметические операции. Деление целочисленное и с остатком. Общий.
Лекция 4 Программирование на Паскале. Элементы языка Турбо Паскаль 7.0. Типы данных. Управляющие конструкции.
Системы счисления, используемые в компьютере. Борисов В.А. КАСК – филиал ФГБОУ ВПО РАНХ и ГС Красноармейск 2011 г.
Языки и методы программирования Преподаватель – доцент каф. ИТиМПИ Кузнецова Е.М. Лекция 5.
Тип, имя и значение переменной.. Переменные. В объектно-ориентированных языках программирования, и в частности в языке Visual Basic, переменные играют.
Представление числовой информации с помощью систем счисления. Перевод чисел в позиционных системах счисления ТЕМА:
Арифметические, строковые и логические выражения. Учитель информатики МКОУ «СОШ с.Петропавловка» Бычкова О.В.
Переменная l. Определение Переменная - именованное место в памяти, в котором можно хранить некоторое значение.
Среди современных языков программирования одним из самых популярных является язык Паскаль. Этот язык разработан в 1971 году и назван в честь Блеза Паскаля.
1 Программирование на языке Паскаль Тема 1. Введение.
Транксрипт:

Тема 2 Основные понятия языка prolog Часть 2 Преподаватель –Юлия Александровна Грачёва

Пролог-программы состоят из термов. Терм – это либо константа, либо переменная, либо структура. Терм записывается как последовательность литер, которые делятся на четыре категории, такие, как: ABCDEFGHIJKLMNOPQRSTUVWXYZ abсdefghijklmnopqrstuvwxyz !"#$%&'()=–~^|\{}[] +;*:,.?/

Константами являются поименованные конкретные объекты или конкретные отношения. Существует два вида констант: атомы и целые числа. Целые числа используются для представления числовых данных, что позволяет выполнять над ними арифметические операции. Есть два вида атомов: составленные из букв и цифр и составленные из спецзнаков. Атомы, составленные из спецзнаков, как правило, состоят только из спецзнаков. Специальные символы, используемые Прологом для обозначения вопросов '?-' и правил ':-', также являются атомами.

Если атом заключается в одиночные кавычки, то его имя может содержать любые литеры. Для простоты чтения внутрь атома можно включать специальную литеру – подчеркивание '_'. Примеры атомов: eat cat mouse -- My_bag А вот это – не атомы 2304ieh _Dog Orange-juice Cheese

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

Анонимная переменная – это одиночный знак подчеркивания '_'. Пример ?- eat (cat, _). Если в одно утверждение входят несколько анонимных переменных, их можно интерпретировать неоднозначно. Это характерная особенность, присущая только анонимной переменной. Она позволяет избавить программиста от необходимости придумывать разные имена переменным в тех случаях, когда эти имена в утверждении нигде больше не употребляются.

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

Структуры полезны также в тех случаях, когда имеется общий тип и может существовать много конкретных экземпляров объектов этого типа. Структура записывается на Прологе с помощью указания ее функтора и компонент. Компоненты заключаются в круглые скобки и разделяются запятыми. Функтор записывается перед открывающей круглой скобкой. have (student, comp(pc, acer)). comp(pc, acer) – это структура

Структуры с переменными в качестве компонент могут появляться в вопросах. ?- have (student, comp(pc, Type)). Если переменные в дальнейшем не используются, можно употребить анонимную переменную: ?- have (student, comp(_, acer (_, twelve_inch ))). Анонимные переменные не «сцепляются» друг с другом.

Предикат (используемый в фактах и правилах) является на самом деле функтором некоторой структуры. Аргументы факта или правила – это компоненты структуры. Все части Пролога, даже сами Пролог-программы, состоят из констант, переменных и структур.

Операторы – это особая форма синтаксиса, облегчающая чтение соответствующих структур. x+y*z в виде структуры выглядит так: +(x,*(y,z)) Операторы не вызывают выполнения каких-либо арифметических операций: в Прологе 3+4 и 7 означают разные объекты. Терм другой способ записи терма +(3,4), который является структурой.

При поиске ответа на вопрос Пролог организует просмотр всех фактов в базе данных, чтобы обнаружить объект, который эта переменная могла бы обозначать. Такая переменная, как X, сама по себе не является именем какого-то конкретного объекта, но она может быть использована для обозначения объектов, которым мы не можем дать имя. Напечатав ответ на вопрос, Пролог остановится и будет ждать дальнейших указаний.

Для чтения арифметических выражений, содержащих операторы требуется знание трех свойств каждого оператора: его позиции, его приоритета и его ассоциативности. Операторы, подобные знакам сложения (+), вычитания (-), умножения (*) и деления (/), записываются между своими аргументами и называются инфиксными операторами. Операторы, записываемые перед своими аргументами, называются префиксными. Операторы, записанные после своих аргументов, называются постфиксными.

Приоритет оператора определяет, какая операция выполняется первой. В Прологе каждый оператор связан со своим классом приоритета, представляющим собой целое число. Операторы бывают левоассоциативными и право ассоциативным и. Левоассоциативный оператор должен иметь слева операции одинакового или низшего приоритета, а справа – операции низшего приоритета. Структура, образованная арифметическими операторами, подобна любой другой структуре. На самом деле никакие арифметические действия не выполняются до тех пор, пока не встретится предикат 'is' (есть)

В Прологе существует особый предикат равенство, являющийся инфиксным оператором, обозначаемым литерой '='. Когда делается попытка доказать согласованность с базой данных целевого утверждения ?- X = Y. Пролог пытается установить соответствие между X и Y; целевое утверждение «доказуемо», если такое соответствие имеется. Это действие можно представить себе как попытку сделать X и Y равными. Предикат равенства является встроенным, т. е. он уже определен в Пролог-системе. Предикат равенства работает так, словно определен следующий факт: X = X.

При согласовании с базой данных цели вида X = Y, где X и Y любые термы, в которых могут содержаться не- конкретезированные переменные, действуют следующие правила: если X представляет собой неконкретезированную переменную, а Y конкретезирована (её значение неважно), то X и Y равны. Кроме того, X станет конкретезированной – ей будет дано то же значение, что и Y. Пример: ?- go(student, cafe) = X.

целые числа и атомы всегда равны самим себе. Например, попытки согласовать следующие целевые утверждения дадут результаты, показанные справа: taxi = taxi /* верно */ pen = pensil /* ложно */ 1066=1066 /* верно */ 1206=1583 /* ложно */ Две структуры равны, если они имеют один и тот же функтор и одинаковое число аргументов, причем все соответствующие аргументы равны. watch(taxi,tv) = watch(taxi,Х).

Целевое утверждение X=Y всегда верно (согласуется с базой данных), если один из аргументов неконкре- тезирован. Более простой способ записи такого правила заключается в использовании того факта, что переменная равна самой себе. Пролог предоставляет также предикат '\=' соответствующий не равно. Целевое утверждение Х\=Y верно в тех случаях, когда не доказуемо утверждение X=Y, и наоборот.

П ролог предоставляет некоторые «встроенные» предикаты, позволяющие сравнивать числа. Их аргументами могут быть конкретезированные переменные, значениями которых являются целые числа, а также целые числа, записанные в виде констант. X = Y X и Y представляют одно и то же число X \= Y X и Y представляют разные числа X Y X меньше YX Y X больше Y X = Y X меньше или равно Y X = Y X больше или равно Y

Поскольку операторы сравнения являются предикатами, можно было бы предположить, что в Прологе допустим следующий факт: 23. утверждающий, что 2 на самом деле больше 3. Факты, подобные этому, с формальной стороны полностью соответствует правилам Пролога. Однако Пролог не разрешает добавлять факты к «встроенным» предикатам. Такая особенность предотвращает непредсказуемые изменения смысла встроенных предикатов.

Пример. База знаний (для ясности набрано на русском): правил(одри,844,878). правил(анаравд,878,916). правил(хивел_да,916,950). правил(лого_ад_идеал,950,979). правил(хивел_аб_иеуаф,979,985). правил(кадваллон,985,986). правил(маредудд, 986,999). принц (X,Y):-правил(Х,А,В),Y = А,Y = В ?- принц(одри,1979). ?- принц(Х,900).

Рассмотрим инфиксный оператор 'is'. Его правый аргумент – терм, интерпретируемый как арифметическое выражение. Для того чтобы выполнить 'is', Пролог сначала вычисляет его правый аргумент в соответствии с правилами арифметики. Результат вычислений проверяется на соответствие с левыми аргументами, чтобы определить, доказуемо ли целевое утверждение. plotnost(X,Y):-nasel(Х,Р), sqv(Х,А), Y is Р/А. Здесь переменная Y до исполнения is не конкретезирована, и она остается в таком состоянии до вычисления выражения. Когда выражение вычислено, Y принимает значение, равное полученной величине.

Предикат is нужно использовать каждый раз, когда требуется вычислить арифметическое выражение. Если некоторая структура интерпретируется как арифметическое выражение, то к ней применяется операция вычисления арифметического выражения, заключающаяся в фактическом выполнении арифметических действий над двоичными представлениями элементов структуры и получении соответствующего результата. X+Y сумма X и YX–Y разность X и Y X*Y произведение X и YX/Y частное от деления X на Y X mod Y остаток от деления X на Y