Potato (weight)
name, name1, name2 = symbol weight = integer
Примеры составных объектов из области определения article можно использовать в утверждениях, определяющих отношение owner:
owner(«Боря», friend(«Монморенси»)). owner(«Боря», dog(«Монморенси»)). owner(«Боря»,book(«Монморенси»,«Марс», «Мерседесов»)). owner(«Боря», boat). owner(«Боря», potato(10)).
При введении цели: owner(«Боря», Have). Будет получен ответ: Have = friend(«Монморенси») Have = dog («Монморенси») Have = book («Монморенси», «Марс», «Мерседесов») Have = boat Have = potato(10) Таким образом, описание домена в случае использования составного объекта имеет вид: compDom = f1(d1_1, d1_2,..., d1_n); F2(d2_1, d2_2,..., d2_m);...; FM(dM_1, dM_2,..., dM_k), где fi - функтор i-ой альтернативы, {di_j} – множество компонентов i-й структуры.
Составные объекты могут сравниваться с использованием предиката «равенство» (пример 1.1).
/*Пример 1.1.*/ Domains d = pair(integer, integer); single(integer); none Predicates Equal(d, d) Clauses Equal(X, X).
При вводе следующих целей имеем: Equal(single(1), pair(1,2)). ложно, Equal(pair(3,4)), pair(3,4)). истинно, Equal(none, none). истинно.
Однако, equal(5, 4). - дает ошибку, так как имеется несоответствие доменов.
Для удовлетворения последней цели необходимо добавить следующее описание предиката equal: Equal(integer, integer), Тогда equal(5,4). - ложно, Equal(5,5) - истинно.
При сравнении объектов типа real нужно быть особенно осторожным (точное сравнение во многих случаях невозможно). Однако, можно, видимо, ввести следующий вариант предиката equal: equal(X,Y):- X/Y < 1.1, X/Y >0.9.
Инструменты: компьютер IBM PC с любой операционной системой, в которой реализован язык PDC Prolog.
Вопросы для защиты лабораторной работы: 1. Какое назначение предиката random(RandomReal)? 2. Как использовать язык Prolog в режиме калькулятора? 3. Перечислире основные правила установления соответствия между левой и правой частями выражения при выполнении операции «=». 3.
Литература:
ЛАБОРАТОРНАЯ РАБОТА № 2
По дисциплине: СИСТЕМЫ ИСКУССТВЕННОГО ИНТЕЛЛЕКТА Тема занятия: РЕАЛИЗАЦИЯ АРИФМЕТИЧЕСКИХ И ЛОГИЧЕСКИХ ОПЕРАЦИИ Цель занятия: Изучение способов реализации арифметических вычислений и логических операций. Количество часов: 4 Содержание работы: Разработать программы, в которых реализованы арифметические и логические операции
Методические указания по выполнению:
Язык Prolog обладает всеми арифметическими возможностями, присущими другим языкам программирования (Pascal, С). Для этого используется мощный набор математических функций и стандартных предикатов.
Реализация арифметических операций
Выполнение четырех основных арифметических операций с указанием соответствия типов операндов и результатов выполнения приведены в табл. 2.1. Таблица 2.1. Операнд 1 Оператор Операнд 2 Результат integer +,-,* integer Integer integer +,-,* real Real real +,-,* integer Real real +,-* real Real integer integer или / или Real real real
Необходимо отметить, что числа можно представлять в различных системах счисления: десятичной или шестнадцатиричной. Последние начинаются со знака доллара ($), например: $2ЕА = 2*16*16+14*16+10 =746.
В простом примере 3.1 осуществляется сложение двух чисел, представленных в различных системах счисления.
/* Пример 2.1.*/ Goal write("AA="),readint(AA),nl, A=-$2EA+AA, write("A=",A).
Математические функции языка приведены в табл. 2.2. Причем аргумент X этих функций является арифметическим выражением.
АРИФМЕТИЧЕСКИЕ ВЫРАЖЕНИЯ, такие, например, как 4, W или X = (cos(Y) - 1.5) / 3 + 2.5, это константа, или переменная, или конструкция, построенная из них путем использования операторов, функций, или скобок и предиката равенства (=). Таблица 2.2. Предикат Описание abs(X) Абсолютное значение числа Х X exp(X) Вычисляется число е в степени Х (е) ln(X) Натуральный логарифм Х lg(X) Десятичный логарифм (X) sqrt(X) Квадратный корень из Х sin(X) cos(X) Тригонометрические функции tan(X) (Х – число, выражающее угол в радианах) arctan(X) Арктангенс действительного числа Х random(X) Устанавливает Х, как псевдослучайное вещественное число с равномерным распределением: 0<=X<1 random(Y,X) Cлучайное целое число Х с равномерным распределением 0<=X<Y round(X) Округляет значение Х trunc(X) Усекает Х (отбрасывает младшие разряды) X mod Y Выдает остаток от деления X на Y X div Y Выдает частное от деления X на Y
Использование функции random(RandomReal) позволяет получать последовательность величин RandomReal, равномерно распределенных в интервале 0<= RandomReal <1. А для установления правого граничного значения для случайных величин используется функция randominit(Y). Функция же random(MaxValue,Randomint) выдает последовательность псевдослучайных величин равномерно распределенных в интервале 0<=Randomint<MaxValue.
При необходимости получить случайные вещественные числа Z в диапазоне от А до В включительно, нужно воспользоваться следующей целью: random(X), Z = A + X * (B-A+1).
Для получения случайных целых чисел Z в диапазоне от А до В включительно можно воспользоваться целью: random(Y,X), Z = A + Y +1.
Значение арифметического выражения может быть вычислено только тогда, когда все переменные, находящиеся в правой части, станут конкретизированными. Вычисления осуществляются с учетом приоритета арифметических операций в следующем порядке: - вычисляются выражения в скобках, - во всем выражении реализуются слева направо операции умножения и/или деления, - выполняются слева направо операции сложения и/или вычитания.
В примере 2.2. реализуется вычисление значений арифметического выражения. При A=2 и B=0,3 X будет равен - 2,1815545036. Это пример, демонстрирующий программу на языке Prolog, содержащую лишь один раздел (раздел goal). Использование предикатов ввода-вывода будет пояснено ниже.
/*Пример 2.2.*/ Goal write(«A=»), readint(A), nl, write(«B=»), readreal(B),nl, X = -A + ((cos(B) - 1.5) / 3), write("X=",X).
Примеры 2.1 и 2.2 показывают, что язык Prolog может использоваться просто в режиме калькулятора. Для этого, не вводя никакой программы, необходимо войти в окно диалога и набрать то арифметическое выражение, значение которого необходимо вычислить.
Пусть необходимо написать программу (пример 2.3), реализующую арифметические операции сложения, вычитания, умножения и деления. Величины, над которыми производятся операции имеют тип real, т.е. они могут быть представлены в любой форме записи целой или вещественной. Запись самой операции имеет тип symbol. Тогда предикат ОПЕРАЦИЯ (operation) имеет, например, следующий вид:
|