Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Использование строк в Турбо-Прологе




Компоновка данных в список

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

Findall (Var_, Predicate_, List_), где Var_ обозначает имя для терма предиката Predicate_, в соответствии с типом которого формируются элементы списка List_.

Пример 39: использование предиката findall.

domains

d=integer

predicates

decimal (d)

write_decimal

clauses

decimal (0)

decimal (1)

decimal (2)

decimal (3)

decimal (4)

decimal (5)

decimal (6)

decimal (7)

decimal (8)

decimal (9)

write_decimal:- findall(C, decimal (C), L), write (L).

goal

write_decimal.

Строка – это набор символов. При программировании на Турбо-Прологе символы могут быть «записаны» при помощи алфавитно-цифрового представления или при помощи их ASCII-кодов. Обратный слэш (\), за которым непосредственно следует ASCII-код (N) символа, интерпретируется как символ. Для представления одиночного символа выражение \N должно быть заключено в апострофы (‘\N’). Для представления строки символов ASCII-коды помещаются друг за другом и вся строка заключается в кавычки («\N\N\N»).

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

· объединение строк для образования новой строки;

· расделение строки для создания двух новых строк, каждая из которых содержит некоторые из исходных символов;

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

Для удобства работы со строками Турбо-Пролог имеет несколько встроенных предикатов, манипулирующих со строками:

· str_len – предикат для нахождения длины строки;

· concat – предикат для объединения двух строк;

· frontstr – предикат для разделения строки на две подстроки;

· frontchar – предикат для разделения строки на первый символ и остаток;

· fronttoken – предикат для разделения строки на лексему и остаток.

Синтаксис предиката str_len:

str_len (Str_value, Srt_length), где первый терм имеет тип string, а второй терм имеет тип integer.

Пример 40:

str_len («Today», L)- в данном случае перменная L получит значение 5;

str_len («Today», 5) – в данном случае будет выполнено сравнение длины строки «Today» и 5. Так как они совпали, то предикат выполнится успешно, если бы длина строки не была равна 5, то предикат вылонился бы неуспешно.

Синтаксис предиката concat:

concat (Str1, Str2, Str3), где все термы имеют тип string.

Пример 41:

concat («Today», «Tomorrow», S3)- в данном случае перменная S3 получит значение «TodayTomorrow»;

concat (S1, «Tomorrow», «TodayTomorrow») – в данном случае S1 будет присвоено значение «Today»;

concat («Today», S2, «TodayTomorrow») – в данном случае S2 будет присвоено значение «Tomorrow»;

concat («Today», «Tomorrow», «TodayTomorrow»)- будет проверена возможность склейки строк «Today» и «Tomorrow» в строку «TodayTomorrow».

Синтаксис предиката frontstr:

frontstr (Number, Str1, Str2, Str3), где терм Number имеет тип integer, а остальные термы имеют тип string. Терм Number задает число символов, которые должны быть скопированы из строки Str1 в строку Str2, остальные символы будут скопированы в строку Str3.

Пример 42:

frontstr (6,«Expert systems», S2, S3)- в данном случае перменная S2 получит значение «Expert», а S3 получит значение,«systems».

Синтаксис предиката frontchar:

frontchar (Str1, Char_, Str2), где терм Char_ имеет тип char, а остальные термы имеют тип string.

Пример 43:

frontchar («Today», C, S2)- в данном случае перменная C получит значение «T», а S2 получит значение,«oday»;

frontchar («Today», ‘T’, S2) – в данном случае S2 будет присвоено значение «oday»;

frontchar («Today», C, «oday») – в данном случае C будет присвоено значение «T»;

frontchar (S1, «T», «oday») – в данном случае S1 будет присвоено значение «Today»;

frontchar («Today», «T», «oday»)- будет проверена возможность склейки строк «T» и «oday» в строку «Today».

Синтаксис предиката fronttoken:

fronttoken (Str1, Lex, Str2), где все термы имеют тип string. В терм Lex копируется первая лексема строки Str1, остальные символы будут скопированы в строку Str2. Лексема – это имя в соответствии с синтаксисом языка Турбо-Пролог или строчное представление числа или отдельный символ (кроме пробела).

Пример 44:

fronttoken («Expert systems», Lex, S2)- в данном случае перменная Lex получит значение «Expert», а S2 получит значение,«systems».

fronttoken («$Expert», Lex, S2)- в данном случае перменная Lex получит значение «$», а S2 получит значение,«Expert».

fronttoken («Expert systems», Lex, «systems»)- в данном случае перменная Lex получит значение «Expert»;

fronttoken («Expert systems», «Expert», S2)- в данном случае перменная S2 получит значение «systems»;

fronttoken (S1, «Expert», «systems»)- в данном случае перменная S1 получит значение «Expert systems»;

fronttoken («Expert systems», «Expert», «systems»)- в данном случае будет проверена возможность склейки лексемы и остатка в строку «Expert systems».




Поделиться с друзьями:


Дата добавления: 2015-06-27; Просмотров: 696; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.009 сек.