Практическая информатика


Примеры программ


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

максимум(X,Y,Z), R is 3*Z.

(см. примеры 1.1)

максимум(X,X,X). максимум(X,Y,X):- X>Y. максимум(X,Y,Y):- X<Y.

гипотенуза(X,Y,Z):- number(X), number(Y), Z is sqrt(X**2 + Y**2).

мин_гип(A1,B1,A2,B2,Min):- гипотенуза(A1,B1,C1), гипотенуза(A2,B2,C2), Min is min(C1,C2).

сумма(X,Y):- integer(X), X<10, Y is X. сумма(X,Y):- integer(X), X1 is X//10, сумма(X1,Y1), Z is X mod 10, Y is Y1+Z.

печать_суммы:- write('Введите число (не забудьте точку в конце): '), read(X), nl, write('Сумма цифр введенного числа равна '), сумма(X,Y), write(Y), nl.

факт(1,1). факт(N,R):- integer(N), N>1, N1 is N-1, факт(N1,R1), R is N*R1.

сумма_списка([],0). сумма_списка([H|T],S):- сумма_списка(T,S1), number(H), S is S1+H.

Пример 1.1.

Пример

Написать процедуру, вычисляющую максимум из двух чисел.

максимум(X,X,X). максимум(X,Y,X):- X>Y. максимум(X,Y,Y):- X<Y.

В предикате максимум/3 третий аргумент является максимумом из двух чисел - первого и второго его аргументов. Смысл каждого из правил данной процедуры вполне очевиден. Посмотрим на реакцию интерпретатора Пролога на запросы, содержащие данный предикат.

?- максимум(20,50,X). X = 50 Yes

?- максимум(100,50,X). X = 100 Yes

?- максимум(X,50,100). X = 100 Yes

Последний ответ показывает, что наш предикат позволяет находить ответ на вопросы типа: "Каково должно быть число, чтобы максимум из искомого числа и числа 50 равнялся бы 100?".

Как вы думаете, почему был получен ответ "No" на следующий запрос?

?- максимум(X,50,40). No

Пример

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




- Начало -  - Назад -  - Вперед -