Неизвестно - Prolog

Здесь есть возможность читать онлайн «Неизвестно - Prolog» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Жанр: Старинная литература, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

Prolog: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Prolog»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

Prolog — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Prolog», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Если заданы два целых числа Х и Y, то их наибольший общий делитель Д можно найти, руководствуясь следующими тремя правилами:

(1) Если Х и Y равны, то Д равен X.

(2) Если Х > Y, то Д равен наибольшему общему делителю Х разности Y - X.

(3) Если Y < X, то формулировка аналогична правилу (2), если Х и Y поменять в нем местами.

На примере легко убедиться, что эти правила действительно позволяют найти наибольший общий делитель. Выбрав, скажем, Х = 20 и Y = 25, мы, руководствуясь приведенными выше правилами, после серии вычитаний получим Д = 5.

Эти правила легко сформулировать в виде прологовской программы, определив трехаргументное отношение, скажем

нод( X , Y, Д)

Тогда наши три правила можно выразить тремя предложениями так:

нод( X, X, X).

нод( X, Y, Д) :-

Х < Y,

Y1 is Y - X,

нод( X, Y1, Д),

нод( X, Y, Д) :-

Y < X,

нод( Y, X, Д).

Разумеется, с таким же успехом можно последнюю цель в третьем предложении заменить двумя:

X1 is Х - Y,

нод( X1, Y, Д)

В нашем следующем примере требуется произвести некоторый подсчет, для чего, как правило,

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

вычисление длины какого-либо списка

; иначе говоря, подсчет числа его элементов. Определим процедуру

длина( Список, N)

которая будет подсчитывать элементы списка Списоки конкретизировать Nполученным числом. Как и раньше, когда речь шла о списках, полезно рассмотреть два случая:

(1) Если список пуст, то его длина равна 0.

(2) Если он не пуст, то Список = [Голова1 | Хвост]и его длина равна 1 плюс длина хвоста Хвост.

Эти два случая соответствуют следующей программе:

длина( [ ], 0).

длина( [ _ | Хвост], N) :-

длина( Хвост, N1),

N is 1 + N1.

Применить процедуру длинаможно так:

?- длина( [a, b, [c, d], e], N).

N = 4

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

N is 1 + N1

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

Интересно посмотреть, что произойдет, если мы попытаемся запрограммировать отношение длинабез использования is. Попытка может быть такой:

длина1( [ ], 0).

длина1( [ _ | Хвост], N) :-

длина1( Хвост, N1),

N = 1 + N1.

Теперь уже цель

?- длина1( [a, b, [c, d], e], N).

породит ответ:

N = 1+(1+(1+(1+0)))

Сложение ни разу в действительности не запускалось и поэтому ни разу не было выполнено. Но в процедуре длина1, в отличие от процедуры длина, мы можем поменять местами цели во втором предложении:

длина1( _ | Хвост], N) :-

N = 1 + N1,

длина1( Хвост, N1).

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

длина1( [ _ | Хвост], 1 + N) :-

длина1( Хвост, N).

и она и в этом случае будет давать те же результаты. С помощью длина1, впрочем, тоже можно вычислять количество элементов списка:

?- длина( [а, b, с], N), Длина is N.

N = 1+(1+(l+0))

Длина = 3

Итак:

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

Арифметические операции необходимо явно запускать при помощи встроенной процедуры is. Встроенные процедуры связаны также с предопределенными операторами +, -, *, /, div и mod.

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

Значения арифметических выражений можно сравнивать с помощью таких операторов, как <, =< и т.д. Эти операторы вычисляют значения своих аргументов.

Упражнения

3. 16. Определите отношение

mах( X, Y, Мах)

так, чтобы Махравнялось наибольшому из двух чисел Х и Y.

Посмотреть ответ

3. 17. Определите предикат

максспис( Список, Мах)

так, чтобы Махравнялось наибольшему из чисел, входящих в Список.

Посмотреть ответ

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «Prolog»

Представляем Вашему вниманию похожие книги на «Prolog» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «Prolog»

Обсуждение, отзывы о книге «Prolog» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x