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

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

Жанры

Неизвестно

Шрифт:

найтитерм( Терм)

которая выводит на терминал новый терм из f, сопоставимый с Терм'ом.

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

6. 2. Пусть f– файл термов. Напишите процедуру

найтивсетермы( Терм)

которая выводит на экран все термы из f, сопоставимые с Tepм'ом. Обеспечьте при этом, чтобы во время поиска Терм не конкретизировался (это

могло бы помешать ему сопоставиться с другими термами дальше по файлу).

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

Назад | Содержание | Вперёд

Назад | Содержание | Вперёд

6. 3. Обработка символов

Символ записывается в текущий выходной поток при помощи цели

put( С)

где С - символ, который нужно вывести, в кодировке ASCII (число от 0 до 127), например, вопрос

?- put( 65), put( 66), put( 67).

породит следующий вывод:

АВС

65 - ASCII-код 'А', 66 - 'В', 67 - 'С'.

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

get0( С)

Она вызывает чтение символа из входного потока, и переменная С конкретизируется ASCII-кодом этого символа. Вариантом предиката get0 является get, который используется для чтения символов, отличных от пробела. Поэтому цель

get( С)

вызовет пропуск всех непечатаемых символов (в частности пробелов) от текущей позиции во входном потоке до первого печатаемого символа. Этот символ затем тоже считывается и С конкретизируется его ASCII-кодом.

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

Робот пытался налить вина из бутылки.

Цель сжатие выведет его в таком виде:

Робот пытался налить вина из бутылки.

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

трех альтернатив обеспечивается в программе отсечениями:

сжатие :-

get0( С),

put( С).

сделатьостальное( С).

сделатьостальное( 46) :- !.

% 46 -АSСII-код точки, Все сделано

сделатьостальное( 32) :- !,

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

get( С),

put( С),

сделатьостальное( С).

сделатьостальное( Буква) :-

сжатие.

Упражнение

6. 3. Обобщите процедуру сжатие на случай запятых. Все пробелы, стоящие непосредственно перед запятой, нужно убрать, а после каждой запятой нужно поместить единственный пробел.

Назад | Содержание | Вперёд

Назад | Содержание | Вперёд

6. 4. Создание и декомпозиция атомов

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

name( A, L)

истинно, если L - список кодов ASCII, кодирующих атом. Например,

name( zx232, [122, 120, 50, 51, 50] )

истинно. Существуют два типичных способа использования name:

(1) дан атом, разбить его на отдельные символы;

(2) дан список символов, объединить их в один атом.

Примером первого случая применения предиката является программа, которая имеет дело с заказами такси и водителями. Все это представлено в программе атомами

заказ1, заказ2, водитель1, водитель2, такси1, таксилюкс

Предикат

такси( X)

проверяет, относится ли атом Х к тем атомам, которые представляют такси:

такси( Х) :-

name( X, Хспис),

nаmе( такси, Тспис),

конк( Тспис, _, Хспис).

конк( [ ], L, L).

конк( [А | L1], L2, [А | L3] ) :-

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

«О» - значит омут

Графтон Сью
Кинси Милхоун
Детективы:
крутой детектив
5.00
рейтинг книги
«О» - значит омут

Кортни. 1-13

Смит Уилбур
Кортни
Приключения:
исторические приключения
прочие приключения
5.00
рейтинг книги
Кортни. 1-13

Я вас люблю

Муравьева Ирина Лазаревна
Семейная сага
Проза:
современная проза
6.25
рейтинг книги
Я вас люблю

Тор. Разрушитель

Хольбайн Вольфганг
1. Асгардская сага
Фантастика:
фэнтези
7.00
рейтинг книги
Тор. Разрушитель

Неучтенный элемент. Том 3

NikL
3. Антимаг. Вне системы
Фантастика:
фэнтези
5.00
рейтинг книги
Неучтенный элемент. Том 3

Война Ретифа (сборник)

Лаумер Кейт Джон
Классика мировой фантастики
Фантастика:
научная фантастика
юмористическая фантастика
7.33
рейтинг книги
Война Ретифа (сборник)

Сборник рассказов

Андреев Леонид Николаевич
Проза:
классическая проза
русская классическая проза
5.00
рейтинг книги
Сборник рассказов

Цвет сверхдержавы - красный 3 Восхождение. часть 1

Сергей Симонов
3. Цвет сверхдержавы - красный
Фантастика:
альтернативная история
5.00
рейтинг книги
Цвет сверхдержавы - красный 3 Восхождение. часть 1

Имперец. Том 5

Романов Михаил Яковлевич
4. Имперец
Фантастика:
попаданцы
альтернативная история
аниме
6.00
рейтинг книги
Имперец. Том 5

Пальмы в снегу

Габас Лус
Проза:
историческая проза
5.00
рейтинг книги
Пальмы в снегу

Матабар IX

Клеванский Кирилл Сергеевич
9. Матабар
Проза:
магический реализм
5.00
рейтинг книги
Матабар IX

Пушкин

Тынянов Юрий Николаевич
Я люблю Пушкина
Документальная литература:
биографии и мемуары
8.00
рейтинг книги
Пушкин

Последний Паладин. Том 13

Саваровский Роман
13. Путь Паладина
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний Паладин. Том 13

"Фантастика 2023-201. Компиляция. Книги 1-26

Кароль Елена
Фантастика 2023. Компиляция
Фантастика:
боевая фантастика
попаданцы
5.00
рейтинг книги
Фантастика 2023-201. Компиляция. Книги 1-26