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

3.3. Создание подстрок

Подстрока — это строка, являющаяся копией некоторой части исходной строки. Например, двумя возможными подстроками строки "Expert Systems" являются "Expert" и "Systems". Турбо-Пролог имеет встроенный предикат frontstr, служащий для создания подстрок. Его синтаксис следующий:

frontsrt(Number, Source_string, Substringl, Substring2).

Аргумент Number задает полное число символов, которые должны быть скопированы в Substringl из Source_String, являющейся исходной строкой. Остальные символы строки Source_string будут скопированы в Substring2. На­пример, утверждение

frontstr(6,"Expert systems". Stringl, String2)

присваивает Stringl значение "Expert", a String2 значение" systems". За­метьте, что число 6 соответствует полному числу символов в "Expert".

Программа Substring демонстрирует использование предика­та frontstr. Программа находит две подстроки для каждой входной строки. Например, первая входная строка есть "Turbo Prolog is fast!", а предикат frontstr, применяемый для ее обработки, имеет вид

frontstr(12, "Turbo Prolog 1s fast!". Rl, R2).

Правило print_strings выводит на печать две подстроки на разные строчки экрана. Результат показан на рис. 10.

/* Программа: Substring */

/* Назначение: Демонстрация использования предиката */

/* front_str(целое,строка1,строка2,строкаЗ) */

predicates

print_strings

goal

print_strings.

clauses

print_strings :-

nl,nl,nl,

frontstr(12,

"Turbo Prolog is fast!",

R1,R2),

write(Rl),nl, write(R2),nl,nl,

frontstr(10,

"Every body loves somebody",

S1,S2),

write(Sl),nl,

write(S2),nl,nl,

frontstr(10,

"Artificial Intelligence",

T1.T2),

write(Tl),nl,

write(T2),nl,nl,

frontstr(17,

"A thing of beauty Is a joy.",

U1,U2),

write(Ul),nl,

write(U2).

Рис. 10. Программа Substring

Рис. 11. Результат работы программы Substring

3.4. Преобразование данных

Турбо-Пролог для преобразования данных из одного типа в другой име­ет следующие предикаты:

upper_lower

str_char

str int

str_real

char_int.

Их применение целесообразно в случае, когда тип объектов встроенного предиката отличается от типа объектов предиката, определенного пользовате­лем.

Например, предикат writef может вызвать разрушение системы, если ему будет передан объект типа char. Если символьная переменная Drive_ltr_str означена символом 'а', то предикат

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. Имена предикатов также указывают и порядок объектов. Например, объект типа string является пер­вым объектом в str_char, а объект типа char - вторым.

Эти предикаты имеют два направления преобразования данных. Напри­мер, если переменная S1 уже означена и имеет значение STARS AND STRIPES, то предикат

upper_lower(Sl,S2)

присваивает строку stars and stripes переменной S2. Но, если S2 означена, а S1 не означена, то значение STARS AND STRIPES получает переменная S1. В случае же когда обе переменные означены, предикат успешен, если одна из переменных имеет значение строки, содержащейся в другой переменной, но записанной строчными буквами.

Предикат str_char используется для преобразования объектов типа string в объекты типа char. Предикат str_int используется для преобразования строчного представления целых чисел в переменные типа integer. Предикат str_real используется для преобразования действительных чисел в строки. Предикат char_int используется для присваивания числа (кода ASCII симво­ла) данному объекту.

Программа Conversions 1 (рис. 97) содержит примеры преобразования данных с использованием встроенных предикатов Турбо-Пролога. Результат работы программы показан на рис.12.

/ *Программа: Converslonsl */

/* Назначение: Демонстрация преобразования типов данных */

predicates

do_conversions

goal

do_conversions.

clauses

do_conversions :-

upper_lower("STARS AND STRIPES".SI),

write("STARS AND STRIPES"),nl,

write(Sl),nl,nl,

upper_lower(S2,"one day at a time"),

write("one day at a time"),nl,

write(S2),nl,nl,

write("T"),nl.

str_cnar("T",Cl),

write(Cl),nl,nl,

write("U"),nl.

char int('U',Nl),

write(Nl),nl.

Рис. 12. Программа Conversions 1

Рис. 13. Результат работы программы Conversionsl