Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
пролог бомбы часть 1 (27-39).doc
Скачиваний:
4
Добавлен:
26.09.2019
Размер:
120.32 Кб
Скачать

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 (десятичная точка подразумевается, но не пишется).