Мегаобучалка Главная | О нас | Обратная связь


мама(Надя, Катя);                мама(Z,Y);.



2020-02-04 383 Обсуждений (0)
мама(Надя, Катя);                мама(Z,Y);. 0.00 из 5.00 0 оценок




 

Графические возможности системы Пролог-Д.

 Когда речь идет о компьютерной графике, построение изображения на экране интерпретируется серией команд. Таким образом, всякое изображение ассоциируется с алгоритмом его построения. Однако, эта концепция не укладывается в принципы декларативного программирования, принятые в системе Пролог-Д. Если последовать этой концепции то необходимым становится описание элементов рисунка в виде совокупности графических объектов, соотношений и связей между ними. В этом случае описание последовательности действий художника - исполнителя становится излишним. В системе Пролог-Д определен набор графических примитивов, отображающих графические объекты и построенных таким образом, что с точки зрения синтаксиса каждый из них может быть только целью, и принимает значение "истина" (выполняется), если на экране появляется графическое изображение объекта. При записи в правиле нескольких графических примитивов и выполнении данного правила на экране появляется объединение графических образов в той последовательности, как они описаны в правиле. Во всех графических встроенных предикатах аргументами должны быть целыми или переменными, конкретизированными целыми, или не конкретизированными переменными. Если это требование не выполнено, то появится сообщение об ошибке. Параметр v - вертикальный размер, а h - горизонтальный размер экрана. Для стандартной платы видеоадаптера VGA v=349, h=639. В предикатах ТОЧКА, ЛИНИЯ, ОКРУЖНОСТЬ, ЗАКРАСКА последний параметр задает цвет. Как правило, если на этом месте стоит не конкретизированная переменная, то также выводится сообщение об ошибке. Для обозначения цвета при использовании видеоадаптера VGA принята кодировка цветов, изображенная в таблице 3.4.1. В системе Пролог-Д имеет место особенность использования встроенных предикатов, обусловленная спецификой графических средств системы IBM-PC. Для использования графики необходимо открыть графический файл с помощью предиката ЗАПИСЬ_В(“grp:”). После завершения работы необходимо открыть файл для вывода текста ЗАПИСЬ_В(“con:”).

 

0 черный 8 темно серый
1 синий 9 светло синий
2 зеленый 10 светло зеленый
3 голубой 11 светло голубой
4 коричневый 12 красный
5 фиолетовый 13 сиреневый
6 темно желтый 14 желтый
7 серый 15 белый

 

Таблица 1. Таблица кодирования цвета в системе Пролог-Д.

 

 В системе Пролог-Д предусмотрены следующие встроенные графические предикаты:

ТОЧКА.

Синтаксис: ТОЧКА(Арг1,Арг2,Арг3)

Встроенный предикат ТОЧКА имеет три аргумента. Ниже приведены результаты выполнения в зависимости от типа аргумента.

ТОЧКА(ц1,ц2,ц3) Установить точку с координатами (ц1,ц2) и цветом ц3;

ТОЧКА(ц1,ц2,П3) П3 := цвет_точки(ц1,ц2);

ТОЧКА(ц1,П2,ц3) Рисовать линию с начальной точкой (ц1,0), конечной - (ц1,211) цветом ц3;

ТОЧКА(П1,ц2,ц3) Рисовать линию с начальной точкой (0,ц2), конечной - (255,ц2) цветом ц3;

ТОЧКА(П1,П2,ц3) Заполнить экран цветом ц3. В этих пяти случаях предикат истинен, иначе - выполнение программы прекращается и выводится сообщение об ошибке: "Невыполнимый предикат ТОЧКА".

 

ЛИНИЯ.

Синтаксис: ЛИНИЯ(Арг1,Арг2,Арг3,Арг4,Арг5).

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

ЛИНИЯ(ц1,ц2,ц3,ц4,ц) Рисовать линию с начальной точкой (ц1,ц2), конечной - (ц3,ц4), цветом ц

ЛИНИЯ(ц1,ц2,ц3,П4,ц) Рисовать закрашенный треугольник с вершинами (ц1,ц2), (ц3,0), (ц3,211) и цветом ц;

ЛИНИЯ(ц1,ц2,П3,ц4,ц) Рисовать закрашенный треугольник с вершинами (ц1,ц2), (0,ц4), (255,ц4) и цветом ц;

ЛИНИЯ(ц1,П2,ц3,ц4,ц) Рисовать закрашенный треугольник с вершинами (ц1,0), (ц1,211), (ц3,ц4) и цветом ц;

ЛИНИЯ(П1,ц2,ц3,ц4,ц) Рисовать закрашенный треугольник с вершинами (0,ц2), (255,ц3), (ц3,ц4) и цветом ц;

ЛИНИЯ(П1,П2,ц3,ц4,ц) | ЛИНИЯ(ц1,ц2,П3,П4,ц) |

ЛИНИЯ(ц1,П2,П3,П4,ц) | ЛИНИЯ(П1,ц2,П3,П4,ц) - Заполнение экрана цветом ц

ЛИНИЯ(П1,П2,ц3,П4,ц) | ЛИНИЯ(П1,П2,П3,ц4,ц) |

ЛИНИЯ(П1,П2,П3,П4,ц) | ЛИНИЯ(ц1,П2,ц3,П4,ц) - Вертикальный, закрашенный цветом ц прямоугольник, с вершинами (ц1,0), (ц1,211), (ц2,0), (ц2,211);

ЛИНИЯ(П1,ц2,П3,ц4,ц) Горизонтальный закрашенный цветом ц прямоугольник с вершинами (0,ц2), (255,ц2), (0,ц4), (255,ц4);

ЛИНИЯ(ц1,П2,П3,ц4,ц) Четырехугольник цветом ц с вершинами (ц1,0), (ц1,211), (0,ц4), (255,ц4);

ЛИНИЯ(П1,ц2,ц3,П4,ц) Четырехугольник цветом ц с вершинами (0,ц2), (255,ц2), (ц3,0), (ц3,211).

В этих шестнадцати случаях предикат истинен, иначе выполнение программы прекращается и выдается сообщение об ошибке.

 

ОКРУЖНОСТЬ.

Синтаксис: ОКРУЖНОСТЬ(Арг1,Арг2,Арг3,Арг4).

Встроенный предикат ОКРУЖНОСТЬ имеет четыре аргумента. Четвертым аргументом всегда должно быть целое, арифметическое выражение или переменная, конкретизированная целым. Ниже приведены результаты выполнения в зависимости от типов аргументов.

ОКРУЖНОСТЬ(ц1,ц2,ц3,ц) Окружность с центром (ц1,ц2), радиусом ц3, цветом ц;

ОКРУЖНОСТЬ(ц1,ц2,П3,ц) | ОКРУЖНОСТЬ(ц1,П2,П3,ц) |

ОКРУЖНОСТЬ(П1,ц2,П3,ц) Заполнение экрана цветом ц

ОКРУЖНОСТЬ(П1,П2,П3,ц) | ОКРУЖНОСТЬ(П1,П2,ц3,ц) |

ОКРУЖНОСТЬ(ц1,П2,ц3,ц) Вертикальный закрашенный цветом ц прямоугольник с вершинами: (ц1-ц3,0), (ц1-ц3,211), (ц1+ц3,0), (ц1+ц3,211);

ОКРУЖНОСТЬ(П1,ц2,ц3,ц) Горизонтальный закрашенный цветом ц прямоугольник с вершинами: (0,ц2-ц3), (255,ц2-ц3), (0,ц2+ц3), (255,ц2+ц3); В этих восьми случаях предикат истинен, иначе выполнение программы прекращается и выводится сообщение об ошибке: "Невыполнимый предикат ОКРУЖНОСТЬ"

4. ЗАКРАСКА.

Синтаксис: ЗАКРАСКА(Арг1,Арг2,Арг3,Арг4).

 Встроенный предикат ЗАКРАСКА имеет четыре аргумента. Процедурно этот предикат означает закрасить цветом Арг3 внутри контура с граничным цветом Арг4 начиная с точки (Арг1,Арг2). Предикат всегда истинен. Все аргументы должны быть целыми, арифметическими выражениями или переменными, конкретизированными целыми. Если это условие не выполняется, то выполнение программы прекращается и выводится сообщение об ошибке: "Невыполнимый предикат ЗАКРАСКА".

Пример: закрашенный квадрат

 

рамка(x1',y1',x2',y2',цвет')<-ЛИНИЯ(x1',y1',x1',y2',цвет');

ЛИНИЯ(x1',y1',x2',y1',цвет');ЛИНИЯ(x1',y2',x2',y2',цвет');

ЛИНИЯ(x2',y1',x2',y2',цвет');

пример <- рамка(50,50,150,150,8),ЗАКРАСКА(100,100,15,8);

?пример;.

 

 В качестве примера приводится описание угла, вершина которого находится в точке (x,y):

угол(x,y)<-ЛИНИЯ(x,y,10,10,1),ЛИНИЯ(x,y,150,50,1);

?угол(100,100);.

 Сначала будет нарисован отрезок, соединяющий точки (100,100) и (10,10), а затем отрезок, соединяющий точки (100,100) и (50,50). Если бы пятым аргументом предикатов ЛИНИЯ было бы число равное нулю, то точки отрезков были бы не видимы. Не обязательно, чтобы описание всей картинки было записано в одном предложении. Часть описания может быть выделена в виде отдельного предложения. Программу предыдущего примера можно модифицировать:

угол(x,y)<-ЛИНИЯ(x,y,10,10,1),продолжение(x,y);

продолжение(x,y)<-ЛИНИЯ(x,y,50,50,1); ?угол(100,100);.

Новая программа будет выполнять те же самые функции, хотя и записывается в два предложения. Система Пролог -Д допускает возможность использования переменных в графических примитивах. В качестве примера приводится описание вектора, выходящего из точки A с кoординатами (x, y) в точку B координатами (s,t):

 

вектор(A(x,y),B(s,t))<-ЛИНИЯ(x,y,s,t,1);

 

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

В качестве примера приводится вопрос:

 

?ЛИНИЯ(0,0,x,0,1);.

В результате ответа на этот вопрос на экране появится треугольник белого цвета. В данном ситуации все просто. Причина появления белого треугольника в том, что величина абциссы второй точки не определена, в этом случае абцисса должна быть любым числом, в допустимых пределах. Как правило, область допустимых значений ограничена размерами экрана. Языковые средства Пролога-Д обеспечивают возможность наращивать определения, естественным путем поддерживают структурность описания объекта. В качестве примера приводится описание построения домика. Домик можно определить как треугольник и квадрат, совмещенные одной стороной. Квадрат можно определить посредством четырех отрезков формально это выглядит так:

 

квадр(x,y,z,t)<-ЛИНИЯ(x,y,x,t,1),ЛИНИЯ(x,y,z,y,1),

ЛИНИЯ(x,t,z,t,1), ЛИНИЯ(z,y,z,t,1);.

 

 

Обработка списков

 На практике часто встречаются задачи, связанные с перечислением объектов. Для описания таких объектов используются списки. Например, список учеников первого класса: [Саша,Петя,Дима,Ксюша,Лена,Оля,Катя].

 Элементами списка могут быть не только атомы, но и функции и, вообще, любые элементы, даже списки. Например, список, состоящий из функций - список остановок поезда с указанием времени стоянки:

[Челябинск(0),Миасс(2),Златоуст(5),Вязовая(5),Усть-Катав(2), Аша(2), Уфа(20),Абдулино(3),Самара(20),Сызрань(2),Инза(2),

Рузаевка(10), Потьма(2), Рязань(5), Москва(0)].

 Примером списка, состоящего из списков, может служить прямоугольная таблица (матрица), представляющая собой список строк, каждая из которых список элементов в данной строке. Например, таблица: 23 45 56 2 78 89 66 45 56 12 3 75 2 3 6 5 2 1 56 2 5 8 9 22 23 22 33 5 6 9 1 33 может быть представлена следующим списком, состоящим из списков:

 [[23,45,56,2,78,89,66,45],[56,12,3,75,2,3,6,5],

[2,1,56,2,5,8,9,22],[2,1,56,2,5,8,9,22],[23,22,33,5,6,9,1,33]].

 Во всех примерах квадратные скобки означают, что данный объект представляет собой список. Список может быть определен двумя способами: перечислением элементов списка, то есть так, как это было сделано выше и определением головы и хвоста списка. Например, список [X|Y] определен именно таким путем. X - это голова списка, а Y - его хвост. Различные шаблоны определяют различное внутреннее представление.

Шаблону [x,y] соответствует внутреннее представление

СПИСОК

/  \

              x  СПИСОК

                                 / \

                                 y [ ]

 

Шаблону [x|y] соответствует внутреннее представление:

 

СПИСОК

/ \

x  y

 

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

 

Решение

Задача 1.1.2

1.1.2. Опишите на языке логики первого порядка свойства отношения равенство.

 

Задача 2.1.2

 

2.1.2. Опишите на языке Пролог-Д состав своей семьи.

Я опишу некоторую, придуманную мной семью, состоящую из мамы, папы, дедушки (отца мамы) и бабушки. Родственные отношения описываются предикатами МАМА, ПАПА, ДЕДУШКА, БАБУШКА.

 

 

Ниже приведен текст программы (файл v8_212.prw)

 

%2.1.2.

МАМА(Оля,Петя);

ПАПА(Сергей,Катя);

МАМА(Лена,Сергей);

ПАПА(Толя,Оля);

БАБУШКА(X,Y)<-МАМА(X,Z),МАМА(Z,Y);

БАБУШКА(X,Y)<-МАМА(X,Z),ПАПА(Z,Y);

ДЕДУШКА(X,Y)<-ПАПА(X,Z),ПАПА(Z,Y);

ДЕДУШКА(X,Y)<-ПАПА(X,Z),МАМА(Z,Y);

 

 

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

Приведем примеры запросов:

 

? ДЕДУШКА(X,Петя);

? МАМА(X,Y);

 

Результат работы программы:

 

X=Коля

 

X=Оля

Y=Катя

 

X=Лена

Y=Сергей

 

Задача 2.2.4

2.2.4. На языке Пролог-Д напишите базу знаний, в которой определяется функция, заданная соотношением:

    ì x, если x <-1,

F(x)= í x+1, если -1<x<1,

    îx, если x >1.

 

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

 

Ниже приведен текст программы (файл v8_224.prw)

 

%2.2.4

 

ЗНАЧЕНИЕ(X,F)<-МЕНЬШЕ(X,-1),РАВНО(-1,F);

ЗНАЧЕНИЕ(X,F)<-МЕНЬШЕ(-1,X),МЕНЬШЕ(X,1),СЛОЖЕНИЕ(X,1,F);

ЗНАЧЕНИЕ(X,F)<-МЕНЬШЕ(1,X),РАВНО(X,F);

 

Приведем примеры запросов:

 

%Примеры вычислений

?ЗНАЧЕНИЕ(2,F);

?ЗНАЧЕНИЕ(-3,F);

?ЗНАЧЕНИЕ(0.2,F);

 

Результат работы программы:

F=2

 

F=-1

 

F=1.2

 

Нетрудно убедиться, что вычисления выполненны верно.

Чтобы работать с программой необходимо делать запросы: ЗНАЧЕНИЕ(аргумент,F);

После выполнения запроса в F будет содержатся значение вычисленного выражения.

 

Задача 2.2.5

 

2.2.5. Какие сложности могут возникнуть в базе знаний о мамах, если у двух мам дети будут тезками? Напишите программу на Прологе-Д, которая находит имя мамы мальчика Петя второго по порядку в базе знаний. Его маму зовут Оля, а не Саша.

 

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

Разрабатываемая программа предназначенна для того, чтобы определять имена матерей по именам их детей.

 

Ниже приведен текст программы (файл v8_225.prw)

 

%2.2.5.

%База мам и детей

МАМА(1,Наташа,Катя);

МАМА(2,Саша,Петя);

МАМА(3,Света,Ваня);

МАМА(4,Лена,Катя);

 

Пример запроса в ситуации, когда у матерей дети – тезки

 

%Какие сложности могут возникнуть в базе знаний о мамах, если у двух мам дети будут тезками?

? МАМА(_,X,Катя);

 

X=Наташа

 

X=Лена

 

Итак, для ребенка мы получили 2-х матерей.

 

Следующая часть задания:

 

%Поиск имя мамы мальчика Петя второго по порядку в базе знаний. Его маму зовут Оля, а не Саша.

? МАМА(2,X,Петя),РАВНО(X,Саша),НЕ(РАВНО(X,Оля));

 

 

Результат работы:

 

X=Саша

 

Итак, мы определили имя мамы мальчика Петя второго по порядку в базе знаний. Его маму зовут Оля, а не Саша.

 

Задача 2.3.2

 

2.3.2. Написать на языке Пролог-Д базу знаний, описывающую вычисление суммы чисел натурального ряда.

 

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

1)S(0)=0

2)S(n)=n+S(n-1)

 

Ниже приведен текст программы (файл v8_232.prw)

 

%2.3.2.

 

%унификация вычисленного значения с выходной переменной

Сумма(0,S,S);

 

%рекурсивный вызов процедуры поиска суммы пока N>0

Сумма(N,P,S)<-СЛОЖЕНИЕ(N,P,L),СЛОЖЕНИЕ(M,1,N),Сумма(M,L,S),!;

 

Пример использования программы:

 

%пример вызова предиката

? Сумма(10,S);

 

Результат:

S=55

 

Несложная проверка показывает правильность произведенных вычислениий.

Для использования программы, надо вызывать предикат Сумма(X,S), подставляя вместо X число, до которого надо найти сумму.

 

Задача 2.3.1

 

2.3.1. Написать на языке Пролог-Д базу знаний, описывающую вычисление факториала.

 

Программа предназначенна для вычисления факториала числа n!=1*2*3…*n.

 

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

1)0!=1

2)n!=n*(n-1)!

Итак, будем рекурсивно вызывать факториал, пока аргумент не станет равным – 0.

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

 

Ниже приведен текст программы (файл v8_231.prw)

 

%2.3.1.

 

Факториал(N,F)<-Факториал(N,1,F);

 

%унификация вычисленного значения с выходной переменной

Факториал(0,F,F);

 

%рекурсивный вызов процедуры вычисления факториала, N*(N-1)*(N-2).....2*1 пока N>0

Факториал(N,P,F)<-УМНОЖЕНИЕ(N,P,S),СЛОЖЕНИЕ(M,1,N),Факториал(M,S,F),!;

 

Пример использования программы:

%пример вызова предиката

? Факториал(5,F);

 

Результат:

F=120

 

Несложная проверка показывает правильность произведенных вычислениий.

Для использования программы, надо вызывать предикат Факториал(X,F), подставляя вместо X число, факториал которого надо найти . Следует учесть, что факториал растет очень быстро и не задавать больших значений аргумента.

Задача 2.4.1

2.4.1. Напишите на языке Пролог-Д базу знаний, описывающую прямоугольный треугольник.

 

Разрабатываемая программа предназначена для рисования прямоугольного треугольника по его катетам. Задача заключается в том, чтобы по катетам найти координаты вершин и соединить их прямыми линиями.

 

Ниже приведен текст программы (файл v8_241.prw)

 

%2.4.1.

%рисуем прямоугольный треугольник с катетами a и b

 

ПрямоугТреуг(a,b)<-ЗАПИСЬ_В("grp:"),СЛОЖЕНИЕ(10,a,c),СЛОЖЕНИЕ(10,b,d),

ЛИНИЯ(10,10,c,10,1),ЛИНИЯ(c,10,10,d,1),ЛИНИЯ(10,d,10,10,1);

 

Пример использования программы:

 

%Пример

 ? ПрямоугТреуг(100,150);

 

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

 

Результат выполнения примера:

 

 

Задача 2.5.4

 

2.5.4. Напишите базу знаний, описывающую удаление n-oго элемента списка

 

Разрабатываемая программа предназначена для удаления элемента с заданным номером из списка.

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

 

Ниже приведен текст программы (файл v8_254.prw)

 

% 2.5.4

%Предикат удаления N-ого символа из списка L и помещение результата в список S

%Первый вызов DELNEL(L,N,1,[],Z) - удаляет символ и записывает результат в обратном порядке

% второй вызов DELNEL(L,0,1,[],S) - обращает обратно

DELNEL(L,N,S)<-DELNEL(L,N,1,[],Z),DELNEL(Z,0,1,[],S);

 

DELNEL([],_,_,S,S);

%если не N-ный символ

DELNEL([X|T],N,I,Y,S)<- НЕ(РАВНО(N,I)),ДОБАВИТЬ(X,Y,Z),СЛОЖЕНИЕ(1,I,J),DELNEL(T,N,J,Z,S);

%если N-ный символ

DELNEL([X|T],N,I,Y,S)<-РАВНО(N,I),СЛОЖЕНИЕ(I,1,J),DELNEL(T,N,J,Y,S);

 

%добавление элемента X в начало списка Y

ДОБАВИТЬ(X,Y,[X|Y]);

 

Пример использования программы, удалим 3-й элемент из списка:

 

%пример работы.

? DELNEL([1,8,9,7,5],3,S);                                                                                                                                                                                                                                                                                                                                                                                              

 

 

Результат выполнения примера:

S=[1,8,7,5]

 

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

 

Список литературы

1. Абдикеев Н.М. Проектирование интеллектуальных систем в экономике. Учебник / М.: Экзамен, 2004 – 526с.

2.  Алексеев М.Н., Бешенков С.А., Гейн А.Г., Григорьев С.Г. Информатика и информационные технологии: практические работы / Миасс, 2000 - 42 с.

3. Бешенков С.А., Гейн А.Г., Григорьев С.Г. Информатика и информационные технологии. Екатеринбург: Уральский рабочий, 1995 - 134 с.

4. Бешенков С.А. Школьная информатика: новый взгляд, новый курс// Педагогическая информатика. N2. 1993 с. 5-10

5. Гаврилова Т.А., Хорошевский В.Ф., Базы знаний  интеллектуальных систем. Учебник/ Санкт-Петербург:Питер, 2000- 382 с.

6. Григорьев С.Г., Морозова Е.В. Информатика и информационные технологии: Сборник задач / ЛБЛ-Балтика. Санкт-Петербург, 1996 – 32 с.

 



2020-02-04 383 Обсуждений (0)
мама(Надя, Катя);                мама(Z,Y);. 0.00 из 5.00 0 оценок









Обсуждение в статье: мама(Надя, Катя);                мама(Z,Y);.

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

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



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (383)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.01 сек.)