Чтение онлайн

на главную - закладки

Жанры

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

Братко Иван

Шрифт:

читбуквы( Буква, Буквы, Сделсимв)

Ее три аргумента:

(1) 

Буква
 — текущая буква (уже считанная) читаемого слова.

(2) 

Буквы
 — список букв (начинающийся с буквы
Буква
), оставшихся до конца слова.

(3) 

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

Мы завершим данный пример замечанием о возможном применения процедуры

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

/*

Процедура читпредложение считывает предложение

и из его слов создает список атомов. Например,

 читпредложение( Списслов)

порождает

 Списслов=['Мэри', было, приятно, видеть, неудачу, робота]

если входным было предложение

 Мэри было приятно видеть неудачу робота.

*/

читпредложение( Списслов) :-

 gеt0( Симв),

 читостальное( Симв, Списслов).

читостальное( 46, []) :- !.

% Конец предложения: 46 = ASCII-код для '.'

 читостальное( 32, Списслов) :- !,

% 32 = ASCII-код для пробела

 читпредложение( Списслов).

% Пропустить пробел

читостальное( Буква, [Слово | Списслов]) :-

 читбуквы( Буква, Буквы, Следсимв),

% Считать буквы текущего слова

 nаmе( Слово, Буквы),

читостальное( Следсимв, Списслов).

читбуквы( 46, [], 46) :- !.

 % Конец слова: 46 = точка

читбуквы( 32, [], 32) :- !.

 % Конец слова: 32 = пробел

читбуквы( Бкв, [Бкв | Буквы], Следсимв) :-

 get0( Симв),

 читбуквы( Симв, Буквы, Следсимв).

Рис. 6.4. Процедура для преобразования предложения в список атомов.

Упражнения

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

начинается( Атом, Символ)

для проверки, начинается ли

Атом
с символа
Символ
.

6.5. Определите процедуру

plural
, которая преобразует английские существительные из единственного числа во множественное, добавляя к слову окончание s. Например:

?- plural( table, X).

X = tables

6.6. Напишите

процедуру

поиск( Ключслово, Предложение)

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

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

6.5. Ввод программ: consult, reconsult

Передавать программы пролог-системе можно при помощи двух встроенных предикатов: 

consult 
и 
reconsult
. Чтобы система считала программу из файла F, нужно поставить цель

?- consult( F).

В результате все предложения программы, содержащейся в F, будут использованы пролог-системой при ответе на дальнейшие вопросы пользователя. Если позже в том же сеансе произойдет "консультация" с другим файлом, предложения этого нового файла будут просто добавлены в конец текущего множества предложений.

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

user
. Добиться этого можно так:

?- consult( user).

После этого система будет ожидать ввода предложений программы с терминала.

В некоторых пролог-системах применяется сокращенная запись для чтения программ из файлов. Файлы, из которых предстоит чтение, просто помещаются в список и этот список используется в качестве цели. Например:

?- [файл1, файл2, файл3].

Это в точности эквивалентно следующим трем целям:

?- соnsult( файл1), соnsult( файл2), соnsult( файл3).

Встроенный предикат

reconsult
аналогичен
consult
. Цель

?- reconsult( F).

даст тот же эффект, что и

consult( F)
с одним исключением. Если в F есть предложения, касающиеся отношений, которые уже были определены ранее, старые определения заменяются на новые из F. Разница между
consult
и
reconsult
в том, что
consult
всегда добавляет новые предложения, в то время как
reconsult
переопределяет ранее введенные определения. Однако
reconsult
не произведет никакого эффекта на те отношения, о которых в F ничего не сказано.

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

Резюме

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

• Файлы являются последовательными. Существуют текущие входной и выходной потоки. Пользовательский терминал рассматривается как файл с именем

user
.

Поделиться:
Популярные книги

Стеллар. Трибут

Прокофьев Роман Юрьевич
2. Стеллар
Фантастика:
боевая фантастика
рпг
8.75
рейтинг книги
Стеллар. Трибут

Его огонь горит для меня. Том 2

Муратова Ульяна
2. Мир Карастели
Фантастика:
юмористическая фантастика
5.40
рейтинг книги
Его огонь горит для меня. Том 2

На границе империй. Том 9. Часть 4

INDIGO
17. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 9. Часть 4

Наследник

Кулаков Алексей Иванович
1. Рюрикова кровь
Фантастика:
научная фантастика
попаданцы
альтернативная история
8.69
рейтинг книги
Наследник

Совершенно несекретно

Иванов Дмитрий
15. Девяностые
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Совершенно несекретно

Ваше Сиятельство 2

Моури Эрли
2. Ваше Сиятельство
Фантастика:
фэнтези
альтернативная история
аниме
5.00
рейтинг книги
Ваше Сиятельство 2

Прометей: каменный век II

Рави Ивар
2. Прометей
Фантастика:
альтернативная история
7.40
рейтинг книги
Прометей: каменный век II

Единственная для темного эльфа 3

Мазарин Ан
3. Мир Верея. Драконья невеста
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Единственная для темного эльфа 3

Жандарм

Семин Никита
1. Жандарм
Фантастика:
попаданцы
альтернативная история
аниме
4.11
рейтинг книги
Жандарм

Долгий путь домой

Русич Антон
Вселенная EVE Online
Фантастика:
космическая фантастика
попаданцы
6.20
рейтинг книги
Долгий путь домой

Прогрессор поневоле

Распопов Дмитрий Викторович
2. Фараон
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Прогрессор поневоле

Наследие Маозари 6

Панежин Евгений
6. Наследие Маозари
Фантастика:
попаданцы
постапокалипсис
рпг
фэнтези
эпическая фантастика
5.00
рейтинг книги
Наследие Маозари 6

Я еще не барон

Дрейк Сириус
1. Дорогой барон!
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Я еще не барон

Лолита

Набоков Владимир Владимирович
Проза:
классическая проза
современная проза
8.05
рейтинг книги
Лолита