Программирование на языке Пролог для искусственного интеллекта
Шрифт:
6.3. Обработка символов
Символ записывается в текущий выходной поток при помощи цели
где С — символ, который нужно вывести, в кодировке ASCII (число от 0 до 127), например, вопрос
породит следующий вывод:
65 — ASCII-код 'А', 66 — 'В', 67 — 'С'.
Одиночный символ можно считать из текущего входного потока при помощи цели
Она вызывает чтение символа из входного потока, и переменная С конкретизируется ASCII-кодом
вызовет пропуск всех непечатаемых символов (в частности пробелов) от текущей позиции во входном потоке до первого печатаемого символа. Этот символ затем тоже считывается и С конкретизируется его ASCII-кодом.
В качестве примера использования предикатов, переносящих одиночные символы, давайте рассмотрим процедуру
Робот пытался налить вина из бутылки.
Цель
Робот пытался налить вина из бутылки.
Процедура
6.3. Обобщите процедуру сжатие на случай запятых. Все пробелы, стоящие непосредственно перед запятой, нужно убрать, а после каждой запятой нужно поместить единственный пробел.
6.4. Создание и декомпозиция атомов
Часто желательно информацию, считанную как последовательность символов, иметь в программе в виде атома. Для этой цели существует встроенный предикат
истинно, если L — список кодов ASCII, кодирующих атом. Например,
истинно. Существуют два типичных способа использования
(1) дан атом, разбить его на отдельные символы;
(2) дан список символов, объединить их в один атом.
Примером первого случая применения предиката является программа, которая имеет дело с заказами такси и водителями. Все это представлено в программе атомами
Предикат
проверяет, относится ли атом X к тем атомам, которые представляют такси:
Предикаты
Наш следующий пример иллюстрирует применение объединения отдельных символов в один атом. Мы определим предикат
который считает предложение с произвольной формой на естественном языке и конкретизирует
то цель
Для простоты будем считать, что каждое предложение оканчивается точкой и внутри него не используются никакие знаки препинания.
Программа для
(1)
(2)
(3)
Процедура, считывающая символы одного слова, такова:
Стеллар. Трибут
2. Стеллар
Фантастика:
боевая фантастика
рпг
рейтинг книги
Его огонь горит для меня. Том 2
2. Мир Карастели
Фантастика:
юмористическая фантастика
рейтинг книги
На границе империй. Том 9. Часть 4
17. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
рейтинг книги
Наследник
1. Рюрикова кровь
Фантастика:
научная фантастика
попаданцы
альтернативная история
рейтинг книги
