Иван Братко - Программирование на языке Пролог для искусственного интеллекта

Тут можно читать онлайн Иван Братко - Программирование на языке Пролог для искусственного интеллекта - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming, издательство Мир, год 1990. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Программирование на языке Пролог для искусственного интеллекта
  • Автор:
  • Жанр:
  • Издательство:
    Мир
  • Год:
    1990
  • Город:
    Москва
  • ISBN:
    5-03-001425-Х
  • Рейтинг:
    4.1/5. Голосов: 101
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

Иван Братко - Программирование на языке Пролог для искусственного интеллекта краткое содержание

Программирование на языке Пролог для искусственного интеллекта - описание и краткое содержание, автор Иван Братко, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

Книга известного специалиста по программированию (Югославия), содержащая основы языка Пролог и его приложения для решения задач искусственного интеллекта. Изложение отличается методическими достоинствами — книга написана в хорошем стиле, живым языком. Книга дополняет имеющуюся на русском языке литературу по языку Пролог.

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

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

Программирование на языке Пролог для искусственного интеллекта - читать книгу онлайн бесплатно, автор Иван Братко
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Следующие примеры иллюстрируют использование этих процедур.

Предположим, у нас есть процедура для вычисления кубов чисел:

куб( N, С) :-

С is N * N * N.

Предположим далее, что мы хотим применить ее для вычисления кубов элементов некоторой последовательности чисел. Это можно сделать с помощью последовательности вопросов:

?- куб( 2, X).

X = 8

?- ку6( 5, Y).

Y = 125

?- куб( 12, Z).

Z = 1728

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

куб :-

read( X),

обработать( X).

обработать( стоп) :- !.

обработать( N) :-

С is N * N * N,

write( С),

куб.

Это был пример программы, декларативный смысл которой трудно сформулировать. В то же время ее процедурный смысл совершенно ясен: чтобы вычислить куб, сначала нужно считать X, а затем его обработать; если X = стоп, то все сделано, иначе вывести X³ и рекурсивно запустить процедуру кубдля обработки остальных чисел.

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

?- куб.

2.

8

5.

125

12.

1728

стоп.

yes

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

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

куб :-

read( стоп), !.

куб :-

read( N),

С is N * N * N,

write( С),

куб.

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

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

куб :-

write( 'Следующее число, пожалуйста:'),

read( X),

обработать( X).

обработать( стоп) :- !.

обработать( N) :-

С is N * N * N,

write( 'Куб'), write( N), write( 'равен'),

write( С), nl,

куб.

Разговор с новой версией мог бы быть, например, таким:

?- куб.

Следующее число, пожалуйста: 5.

Куб 5 равен 125

Следующее число, пожалуйста: 12.

Куб 12 равен 1728

Следующее число, пожалуйста: стоп.

yes

В некоторых реализациях для того, чтобы приглашение появилось на экране перед чтением, необходимо выдать дополнительный запрос (такой, скажем, как ttyflush) после записи.

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

6.2.2. Вывод списков

Кроме стандартного прологовского формата для списков существуют несколько других естественных форм их внешнего представления, которые в некоторых ситуациях являются более предпочтительными. Следующая процедура

вывспис( L)

выводит список L так, что каждый его элемент занимает отдельную строку:

вывспис( []).

вывспис( [X | L) :-

write( X), nl,

вывспис( L).

Если у нас есть список списков, то одной из естественных форм его выводе является такая, при которой все элементы каждого списка записываются на отдельной строке. Для этого мы определим процедуру вывспис2. Вот пример ее использования:

?- вывспис2( [ [а, b, с], [d, e, f], [g, h, i] ] ).

а b с

d e f

g h i

Процедура, выполняющая эту работу, такова:

вывспис2( []).

вывспис2( [L | LL] ) :-

строка( L), nl,

вывспис1( LL).

строка( []).

строка( [X | L] ) :-

write( X), tab( 1),

строка( L).

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

?- диагр( [3, 4, 6, 5] ).

***

****

******

*****

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

диагр( [N | L]) :-

звездочки( N), nl,

диагр( L).

звеэдочки( N) :-

N > 0,

write( *),

N1 is N - 1,

звездочки( N1).

звездочки( N) :-

N =< 80.

6.2.3. Формирование термов

Предположим, наша программа имеет дело с семьями, которые представлены в виде термов так, как это сделано в гл. 4 (рис. 4.1). Тогда, если, переменная F конкретизирована термом, изображенный на рис. 4.1, то цель

write( F)

вызовет вывод этого терма в стандартной форме примерно так:

семья( членсемьи( том, фокс, дата( 7, май, 1950),

работает( bbс, 15200)),

членсемьи( энн, фокс, дата( 9, май, 1951),

неработает),

[членсемьи( пат, фокс, дата( 5, май, 1973),

неработает),

членсемьи( джим, фокс, дата( 5, май, 1973),

неработает)])

родители

том фокс, датарожд 7 май 1950, работает bbс,

оклад 15200

энн фокс, датарожд 9 май 1951, неработает

дети

пат фокс, датарожд 5 май 1973, неработает

джим фокс, датарожд 5 май 1973, неработает

Рис. 6.2. Улучшенный формат вывода термов, представляющих семью.

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

вывсемью( F)

с помощью которой это достигается, приведена на рис. 6.3.

вывсемью( семья ( Муж, Жена, Дети) :-

nl, write( родители), nl, nl,

вывчленсемьи( Муж), nl,

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

Интервал:

Закладка:

Сделать


Иван Братко читать все книги автора по порядку

Иван Братко - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Программирование на языке Пролог для искусственного интеллекта отзывы


Отзывы читателей о книге Программирование на языке Пролог для искусственного интеллекта, автор: Иван Братко. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x