Встроенные предикаты для обработки строк:
frontchar(String,FrontChar,RestString)(string,char,string) – (i,o,o) (i,i,o) (i,o,i) (i,i,i) (o,i,i) | Разделяет строку String на две части: первый символ FrontChar и оставшаяся часть строки RestString. |
fronttoken(String,Token,RestString) (string,string,string) – (i,o,o) (i,i,o) (i,o,i)(i,i,i)(o,i,i) | Разделяет строку String на лексему Token и остаток RestString (выполняется только для строк, состоящих из латинских букв). |
frontstr(Lenght,InpString,StartString,RestString)(integer,string,string,string) - (i,i,o,o) | Отрезает от заданной строки InpString строку StartString из Lenght символов. Выдает оставшуюся часть строки RestString. |
concat(String1,String2,String3) (string,string,string) – (i,i,o) (i,o,i) (o,i,i) (i,i,i) | Конкатенация двух строк: String3 = String1 + String2. |
str_len(String,Length) (string,integer) - (i,i) (i,o) (o,i) | Определяет длину строки. |
isname(StringParam) (string) - (i) | Истинен, если StringParam представляет собой имя, доступное в Турбо-Прологе. Выполняется только для последовательности символов, состоящей из латинских букв. |
format(OutputVariable,FormatString,Variable|Constant*) - (o,i,i) | Выводит по формату FormatString список вывода Variable|Constant* в строковую переменную OutputVariable |
Лексема - это последовательность символов, определяемая как:
· имя в соответствии с синтаксисом Турбо-Пролога,
· строчное представление числа,
· отдельный символ (может быть пустым - пробел).
Пример. Создать предикат, имеющий два аргумента, который будет преобразовывать строку в список символов. Первый аргумент - заданная строка, второй аргумент — список, состоящий из символов исходной строки.
str_list("",[]).
str_list(S,[H|T]):– frontchar(S,H,S1), str_list(S1,T).
/* пустой строке соответствует пустой список */
/* H — первый символ строки S, S1 — остаток строки */
/* T — список, состоящий из символов, входящих в строку S1*/
Пример. Вычислить длину строки.
Predicates
Start
Dlina(string,integer)
Goal
Start.
Clauses
start:- write("Введите строку
(в конце строки поставьте точку)= "),
readln(Text), nl, dlina(Text,N), write(" длина = ",N).
dlina(Str,N):- frontchar(Str,H,Str1), dlina(Str1,N1), N=N1+1.
Dlina(_,0).
Структуры
Структура – это единый объект (отношение), состоящий из совокупности других объектов (отношений), называемых компонентами. Компоненты группируются в структуру для удобства использования. Структуру следует рассматривать как средство описания сложного составного объекта или сложного отношения.
Пример. Карточка-указатель для библиотечной книги.