- •27.Управление программой. Внутренние подпрограммы унификации Пролога.
- •28.Структура программ на Прологе. Предикаты и утверждения.
- •29.Арифметика в Прологе.
- •30.Программирование повторяющихся операций. Повторение и откат.
- •31.Методы повторения. Методы организации рекурсии.
- •32.Списки в Прологе. Применение списков в программе.
- •33.Использование метода с разделением списка на голову и хвост. Компоновка данных в список.
- •34.Присваивание переменным строковых значений. Конкатенация строк. Преобразование данных.
- •35.Создание символьных префиксов. Преобразование строк в список символов.
- •36.Специальные строки Пролога.
- •37.Формирование атомов из строк.
- •38.Преобразование строк в списки атомов с функторами.
- •39.Предикаты Пролога для работы с файлами. Использование предикатов для работы с файлами.
34.Присваивание переменным строковых значений. Конкатенация строк. Преобразование данных.
Операции, обычно выполняемые над строками, включают:
объединение строк для образования новой строки;
расщепление строки для создания двух новых строк, каждая из которых содержит некоторые из исходных символов;
поиск символа или подстроки внутри данной строки.
Строка символов может быть присвоена переменной. Таким образом, следующие присвавиания эквивалентны:
S = "\84\117\114\98\111\32\80\82\79\76\79\71\"
и
S = "Turbo PROLOG".
Представление символьных строк в коде ASCII весьма громоздко и неудобно. Обычно более эффективно непосредственное алфавитно-цифровое представление. Однако представление символов и строк в коде ASCII используется в машинно-ориентированных языках, таких как ассемблеры, а также при создании компиляторов, операционных систем и контроллеров устройств связи.
Фиксированные строковые константы S1, S2, S3, ... S9 объявлены в разделе доменов. Правило print_strings включает десять предикатов присваивания строк, а так же десять операторов ввода строк. Символ равенства (=) используется как символ для обозначения отношения. Это обозначение является "инфиксным" обозначением отношения.
Конкатенация двух строк означает их объединение, то есть образование одной новой строки. Например, результат конкатенации двух строк
"one day"
"at a time"
может быть либо "one day at a time" или "at a time one day". Эти две результирующие строки различны, так как образующие их строки были объединенны в различном порядке. Турбо-Пролог имеет встроенный предикат concat, который выполняет соединение (конкатенацию) двух строк. Его синтаксис следующий:
concat(Input_string1, Input_string2, Output_String).
Турбо-Пролог для преобразования данных из одного типа в
другой имеет следующие предикаты:
upper_lower
str_char
str_int
str_real
char_int.
Их применение целесообразно в случае, когда тип объектов
встроенного предиката отличается от типа объектов предиката,
определенного пользователем.
Например, предикат writef может вызвать разрушение системы, если ему будет передан объект типа char. Если символьная переменная Drive_ltr_str означена символом 'a', то предикат
writef("The current drive is %:", Drive_ltr_str)
вызовет отказ системы.(Во время компиляции сообщения об ошибках и предупреждения не выдаются). Данная проблема легко может быть преодолена с помощью предикатов, указанных выше. Например:
str_char(Drive_ltr_srt, Drive_ltr),
writef("The current drive is %:", Drive_letter).
Преобразования столь же необходимы, когда значение одного типа должно быть присвоено переменной другого типа. Все предикаты преобразования данных содержат два объекта.
Имена предикатов показывают тип выполняемого преобразования. Например, str_char преобразует строку, состоящую из одного символа и имеющую тип string, в значение типа char. Имена предикатов также указывают и порядок объектов.
Предикат str_char используется для преобразования объектов типа string в объекты типа char.
Предикат str_int используется для преобразования строчного представления целых чисел в переменные типа integer.
Предикат str_real используется для преобразования действительных чисел в строки. Предикат char_int используется для присвавиания числа (кода ASCII символа) данному объекту.
conv_real_int(R,N) :- R=N.
Здесь R это переменная для действительных чисел, а N - переменная для целых чисел. Объявление в разделе predicates следующее:
conv_real_int(r,n).
Правило для преобразования целого числа в действительное следующее:
conv_int_real(N,R) :- N=R.
Здесь N это целочисленная переменная , а R – переменная для действительных чисел. Если N имеет значение 1234, то R получит значение 1234 (десятичная точка подразумевается, но не пишется).
