Строка – это набор символов. При программировании на Прологе символы могут быть «записаны» при помощи алфавитно-цифрового представления или при помощи их 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.
Пример 58:
str_len («Today», L)- в данном случае переменная L получит значение 5;
str_len («Today», 5) – в данном случае будет выполнено сравнение длины строки «Today» и 5. Так как они совпали, то предикат выполнится успешно, если бы длина строки не была равна 5, то предикат вылонился бы неуспешно.
Синтаксис предиката concat:
concat (Str1, Str2, Str3), где все термы имеют тип string.
Пример 59:
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.
Пример 60:
frontstr (6,«Expert systems», S2, S3)- в данном случае перменная S2 получит значение «Expert», а S3 получит значение ,« systems».
Синтаксис предиката frontchar:
frontchar (Str1, Char_, Str2), где терм Char_ имеет тип char, а остальные термы имеют тип string.
Пример 61:
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. Лексема – это имя в соответствии с синтаксисом языка Турбо-Пролог или строчное представление числа или отдельный символ (кроме пробела).
Пример 62:
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».