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

3.6 Создание символьных префиксов

Создать "префиксный" символ — это значит присоединить этот символ к началу строки. Например, присоединение префикса 'А' к "BCDEF" дает строку "ABCDEF". Эта операция в Турбо-Прологе реализуется с помощью встроенного предиката frontchar:

frontchar(String,Char,Rest_of_string}.

Объекту String присваивается значение, состоящее из Char и Rest_of_string (остаток строки).

Рассмотрим в качестве примера три предиката. Первый из них

frontchar(Str, 'F', "OX"),

присваивает символьной переменной Str значение "FOX" (лиса). Второй

frontchar("SPRING", С, "PRING").

присваивает символьной переменной С значение 'S'. Третий

frontchar("dBASE", 'd', X).

присваивает X значение BASE.

Предикат frontchar аналогичен предикату concat, за исключением того, что он присоединяет значение типа char к началу строки. Как и предикаты, выполняющие преобразование типов, предикат frontchar имеет несколько на­правлений обработки данных.

Программа Frontchar (рис. 16) демонстрирует использование преди­ката frontchar.

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

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

/* frontchar(строка,первый_символ.строка) */

predicates

print_all

goal

print_all.

clauses

print_all :-

frontchar(Strl,'A',"BCDEF"),

nl,write(" Strl - ", Strl),

frontchar(Str2,'8',"is enough"),

nl.write(" Str2 = ", Str2),

frontchar(Str3,'?'."Show"),

nl,write(" Str3 = ", Str3),

frontchar(" Str4,' #', "&%#!!!"),

nl,write(" Str4 = ", Str4),

frontchar(Str5,1,"23LOTUS"),

nl,write(" Str5 = ". Str5),

frontchar(Str6,' ',"//"),

nl,write(" Str6 = ", Str6).

Рис. 16. Программа Frontchar

3.7. Преобразование строк

Предикат frontchar полезен при преобразовании строки в список симво­лов. Пусть, например, необходимо преобразовать строку STARS в список ['S','T','A','R','S']. Метод этого преобразования заключается в циклическом использовании предиката frontchar для "вырезания" первого символа и раз­мещения его в списке. Правило, которое выполняет эту процедуру, следую­щее:

convert("", []).

convert(Str, [Head|Tall]) :-

frontchar(Str, Head, Strl),

convert(Strl, Tall).

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

В правиле convert первым параметром является строка, а вторым пара­метром — список. Предикат frontchar рекурсивно извлекает первый символ из Str и помещает его в список.

Программа Charlistl (рис. 18) использует данное правило. Как вы видите, в разделе domains программы объект char_list является списком сим­волов, a str — строкой.

Диалог с программой во время ее выполнения показан на рис.19. За­метьте, что второй список — это список цифр, которые образуют строку. Они не имеют числового смысла, т. е. арифметические операции над ними не могут быть выполнены.

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

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

/* в список символов с использованием */

/* предиката frontchar */

domains

char_list = char *

str = string

predicates

convert(str, char_list)

clauses

convert("",[]).

convert(Str, [Head|Tail]) :-

frontchar(Str,Head,Strl),

conver(Strl,Ta1l).

Рис. 18. Программа Charlist1

Программа Charlist2 (рис. 20) является вариантом программы Charlistl. Она имеет внутреннюю цель, состоящую из правила do_convert_print. Это правило использует правило convert для преобразования строки "STARS AND STRIPES" в список символов. Charlist2 выводит на печать строки чисел в удобном формате (рис. 21).

Рис. 19. Диалог с программой Charlist1

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

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

/* в список символов с использованием */

/* предиката frontchar */

domains

char_list = char *

str = string

predicates

convert(str, char_1ist)

print list(char_list)

do_convert_and_print

goal

do_convert_and_print.

clauses

convert("",[]).

convert(Str, [Head|Tail]) :-

frontchar(Str,Head,Strl),

convert(Strl,Tail).

print list([]).

print_1ist([Head|Tail]) :-

write(Head," "),

print_list(Tail).

do_convert_and_print :-

n1,nl,

write("STARS AND STRIPES"),nl,nl,

convert("STARS AND STRIPES",List),

print_list(List), nl,nl,

write(" All done!"),n1.

Рис. 20. Программа Charlist2

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