ЯЗык "Пролог". Понятие базы знаний, определение. Задачи и упражнения, страница 7

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

Имена всех встроенных функций записываются строчными латинскими буквами. Для имен "своих" функций можно использовать как русские, так и латинские буквы.

Встроенные функции: sin, cos, tan, arctan, In, log, exp, sqrt, round,

trunc, abs.

Арифметические операторы: +, -, *, /, mod, div.

Операторы сравнения: >, <, =, >=, <=, <>, ><

Функции можно использовать в правилах. Например, напишем правило для вычисления квадратного корня данного числа. Для этого используем функцию sqrt, и правило будет иметь вид:

кв_корень(ХХ,Х):- X=sqrt(XX).

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

В качестве упражнения можно написать "свои" математические функции (стремя параметрами) для всех четырех действий арифметики.

Написанные правила для определения "своих" функций можно использовать при решении задач наравне со встроенными функциями. Для этого нужно записать их в базу знаний.

4.1. Примербазызнаний: сложениеденежныхсумм

При изучении материалов предыдущих параграфов должен был возникнуть вполне закономерный вопрос «А как программируют на Прологе?» Сейчас мы решим на Прологе вычислительную задачу. Пусть нам даны две денежные суммы (в рублях и копейках) и тре-


буется вычислить результат их сложения

Для написания программы на Прологе (точнее, для определения количества переменных в будущем правиле) удобно использовать представление программы в виде «черного ящика». Нам заранее неизвестно, какова будет программа, но зато мы сразу сможем определить, что нам дано и что будет результатом. На «входе» черного ящика изображаются исходные данные (количество стрелок на входе равно числу исходных данных), а на выходе изображаются результаты.

Для нашей задачи «черный ящик» будет таким:

Теперь можно описать количество и расположение параметров в будущем правиле (назовем его «сумма»). Оно может быть например, таким:

сумма(<руб1>,<коп1>,<руб2>,<коп2>,<руб>,<коп>).

Затем следует решить задачу математически. При сложении денег возможны два случая:


1. если сумма копеек не составляет полного рубля, т.е. если коп1+коп2<100, то результат подсчитывается по формулам:

руб=руб1+руб2, коп=коп1+коп2;

2. если при сложении копеек их сумма составляет рубль или боль ше, т.е. когда коп1+коп2>=100, то формулы будут такие:

руб=руб1+руб2+1, коп=коп1+коп2-100.

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

% Сложение денежных сумм-1

/***.♦*«**♦♦**,**..*„.,***.**.*„******.*.♦♦*♦***.,*♦*,/

DOMAINS 4Hcno=integer

PREDICATES

сумма(число,число,число,число,число,число)

CLAUSES сумма(Руб1,Коп1,Руб2,Коп2,Руб,Коп):Коп1+Коп2<100,

Руб=Руб1+Руб2,

Коп=Коп1+Коп2.


сумма(Руб1;Коп1,Руб2,Коп2,Руб,Коп):Руб=Руб1+Руб2+1,

Коп=Коп1+Коп2-100. Проверить работу программы можно на контрольных примерах:


По-русски:

Скольмэ будет 1 руб. 29 коп + 3 руб. 02 мол?

I Сколько будет 5 руб. 45 коп + 4 руб 92 кол?


На Прологе:

Цель:сумма(1,29,3,2,Руб,Коп)

Цель:сумма(5,45,4,92,Руб,Коп)


Ответ ЭВМ:

Руб=4 Коп=31

Руб=10 Коп=37


4.2. Базазнаний«Сложениеденежныхсумм-2»

При решении предыдущей задачи предполагалось, что человек не будет задавать вопросов типа ?сумма(1,129,3,200,Руб.Коп), т.е. в вопросе не может фигурировать неправильно написанная денежная сумма. • А какой результат будет получен, если задать машине вопрос:

?сумма(1,129,3,200,Руб,Коп)

Почему машина получила ошибочный результат? Как заставить машину правильно анализировать этот случай (и все подобные ему)?

Решение подобной задачи реализуется в виде программы «Сложение денежных сумм-2»:

% Сложение денежных сумм-2

DOMAINS 4Hcno=integer

PREDICATES

сумма(число,число,число,число,число.число)