|
||||
|
Назад | Содержание| Вперёд 6. 3. Обработка символов Символ записы...Назад | Содержание| Вперёд 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. Обобщите процедурусжатие на случай запятых. Все пробелы, стоящиенепосредственно перед запятой, нужно убрать, апосле каждой запятой нужно поместитьединственный пробел. Назад | Содержание| Вперёд |
|
||
Главная | В избранное | Наш E-MAIL | Добавить материал | Нашёл ошибку | Наверх |
||||
|