Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Работа с символами и строками





Над строками обычно выполняются следующие операции:

1) объединение двух строк в новую строку (+) – конкатенация,

2) расщепление строки для создания двух новых строк, каждая из которых содержит некоторые из исходных символов,

3) поиск символа или подстроки внутри данной строки.

В компьютере символы могут быть представлены двумя способами.

1. Кодами в виде одиночного символа ‘\N’, где N – число-код соответствующего символа в 10-ричном или 16-ричном представлениях:

S=”\65”

S=”\41”

2. Как строка символов “\N\M\O\”:

S=”abc”- строка

S=”\65\66\67”

S=”\16”

Коды могут быть использованы для получения на экране псевдографических символов/

Строки могут быть присвоены переменным и выведены на печать:

Printstring: – S1=«это пример», S2=«печать».

write(S1), write(S2), nl – печать строки

Пример в виде программы.

domains S1, S2=string predicates datastring(S1, S2) printstring Goal printstring clauses datastring(S1, S2):- S1=”это пример”, S2=”печать”. printstring:- datastring(S1, S2), write(S1), nl, write(S2).  

Фиксированные строковые константы S1, S2 объявляются в разделе доменов. Можно размещать строки в одном правиле, а вызывать и обрабатывать их в других правилах. Правило datastring содержит строки. Для того чтобы передать строки из него в правило printstring первое должно быть включено во второе с явным указанием символов s1, s2 в списке объектов вызываемого правила. Необходимость такого включения определяется отсутствием понятия локальной переменной в Прологе для удержания промежуточных результатов и их применения в процессе вычисления.

Областью определения переменных является правило. В другом правиле эти переменные не видны и недопустимы. Поэтому мы соединяем в одно правило. Для работы со строковыми объектами в Турбо Прологе введены предписанные предикаты.

1. Определение длины строки (количество символов строки): strlen (значение строки, длина строки). Способ действия данного предиката зависит от того, что означено в аргументах. Если длина строки не означена, то она вычисляется, иначе производится сравнение.

Strlen (“abba”, X)

X – неизвестная, результат работы Х=4

Х=3, strlen(“abba”, X), результат неуспех, ложь

2. Конкатенация (сложение строк).

Встроенный предикат concat (X, Y, Z) – объединяет (помещает) X, Y в Z, входные и выходные строки могут быть представлены переменными.

Х = “паро”

Y = “ход”

Тогда Z=”пароход”

3. Получение подстрок.

Подстрокой называется строка, являющаяся копией некоторой части исходной строки.

Встроенный предикат Frontstr(N, исходная строка, строка1, строка2) копирует N первых символов из исходной строки в строку 1, остальные символы в строку 2.

4. Преобразование данных к разным типам.

Для преобразования имеются следующие предикаты:

· преобразование строки в символ str_char,

· преобразование строки в число str_int,

· преобразование строки в действительное число str_real,

· преобразование символа в код символа char_int,

· большие буквы переделывает в маленькие Upper_lower.

Эти операторы применяют, когда тип объектов встроенного предиката отличается от типа объектов предиката, определенного пользователем.

Пример. writef – печать форматная.

writef («текущее устройство есть %», drive_str). Этот оператор вызовет отказ системы, если символьная переменная drive_str будет означена символом «а». Чтобы система не выдала ошибки, нужно писать: str_char (drive_str, drive), writef(«текущее устройство есть %», drive).

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

Например, при преобразовании upper_lower(S1, S2) при S1= ”STAR” переменной S2 присваивается значение “star” только в том случае, если она на данный момент не означена (не имеет значение).

Если S2 = ”star”, а S1 не означена, то совершается переход в прописные (большие) буквы.

Пользователь может сам разработать предикаты преобразований:

Real_int, int_ real – удобны для математических расчетов R – real, N – int,

conv_ real _ int (R,N): – R=N,

conv_ int_ real (R,N): – N = R – обратное преобразование,

conv _strsymbol(S, Sb): – S = Sb, где S – строка, Sb – символ.

Это преобразование удобно для обработки данных и записи в памяти.

5. Создание символьных предикатов означает присоединение символа к началу строки. Для совершения этой операции введен предикат

frontchar (строка, символ, остаток строки).

Объекту строка присваивается значение конкатенации символа и остатка строки.

Пример: frontchar (“spring”, C, “pring”) – результат: С=’s’.

6. Преобразование строки в список символов, т.е. из строки можно получить список. Для преобразования строки используется frontchar. Метод преобразования заключается в циклическом использовании frontchar для вырезания первого символа и размещении его в список. Правило преобразования записывается в виде:

convert (“”, [ ]) – граничное условие,

convert (str, [H|T]): – frontchar(str,H, str1),

convert(str1, T).

Пример программы.

domains

char_lis=char*

str=string

predicates

convert(str,char_list)

print_list(char_list)

do_convert_and_print

goal

do_convert_and_print.

clauses

convert(“”, [ ]).

convert(Str, [H|T]): – frontchar(Str, H, Str1),convert(Str1, T).

print_list([]).

print_list([H|T]):– write(H, ” “),print_list(T).

do_convert_and_list:- nl, nl, write(“STARS AND”), nl, nl, convert(“Stars AM”, List),

print_list(List), nl, nl, write(“All done”), nl.

 







Дата добавления: 2015-10-19; просмотров: 505. Нарушение авторских прав; Мы поможем в написании вашей работы!




Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...


Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...


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


ТЕОРЕТИЧЕСКАЯ МЕХАНИКА Статика является частью теоретической механики, изучающей условия, при ко­торых тело находится под действием заданной системы сил...

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

Искусство подбора персонала. Как оценить человека за час Искусство подбора персонала. Как оценить человека за час...

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

Схема рефлекторной дуги условного слюноотделительного рефлекса При неоднократном сочетании действия предупреждающего сигнала и безусловного пищевого раздражителя формируются...

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

Медицинская документация родильного дома Учетные формы родильного дома № 111/у Индивидуальная карта беременной и родильницы № 113/у Обменная карта родильного дома...

Studopedia.info - Студопедия - 2014-2025 год . (0.009 сек.) русская версия | украинская версия