КАТЕГОРИИ: Архитектура-(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; Просмотров: 754; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |