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

Лабораторная работа № 4 Работа со списками

3.1 Длина строки

Длина строки измеряется полным числом символов в строке. Турбо-Пролог имеет встроенный предикат str_len, который используется для нахож­дения длины строки. Синтаксис этого предиката следующий:

str_len(String_value, String_1ength).

Если переменная L не означена до начала обработки правила

str len("TODAY",L).

то она получит значение длины строки TODAY (сегодня). Этим значением будет целое число. Если же до начала выполнения вызова предиката str_len обе его переменные уже означены, то предикат будет успешным только при условии, что значение String_length равно длине строки String_value. Например, если S имеет значение ABC, a L имеет значение 3, то предикат str_len(S,L) успешен. В противном случае он неуспешен.

Программа ShowLengthl (рис. 3) иллюстрирует использование внут­ренней цели для нахождения длины строки "Turbo Prolog". Результат пока­зан на рис.89.

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

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

/* str_len(строка, длина_строки) */

predicates

find_str1ng_length goal

find_str1ng_length. clauses

find_str1ng_length :-

str_len("Turbo Prolog", Length),

nl.nl,

write(" Turbo Prolog"),

nl.nl,

write(" Length = ", Length).

Рис. 3. Программа ShowLengthl

Программа ShowLength2 (рис. 5) демонстрирует простое применение предиката str_len. Программа выводит длину объектов утверждений базы данных. Правилом для нахождения длин строк является find_length. Это пра­вило содержит: lin(S); строку данных str_len(S,L), где S — имя строковой пе­ременной, a L — длина этой строки; и предикат write для выдачи длин строк.

Результат работы программы показан на рис. 4. Числа в скобках -это длины строк. Заметьте, что две "пустые" строки на самом деле не пус­тые - каждая из них содержит 27 символов пробела.

Рис.4 . Диалог с программой Showlengthl

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

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

/* str_len(cтpoкa, длина_строки) */

/* Указание: Запустите программу. Цель включена в программу */

predicates

lin(string) find_length

goal

find length.

clauses

1in(" Открытие ").

1in(" Это было путешествие, ").

1in("- путешествие в ночь,").

1in("- путешествие в день,").

1in("- путешествие в мечту.").

1in(" Когда я достиг этой земли,").

1in("я нашел себя").

1in(" ").

1in(" Khinzu ").

fing_1ength :-

lin(S),

str_len(S,L),

write(S, " (",L,")"),nl,

fall.

Рис. 5. Программа ShowLength2

3.2 Конкатенация строк

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

"one day", "at a time"

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

может быть либо "one day at a time", либо "at a time one day". Эти две результирующие строки различны, так как образующие их строки были объ­единены в различном порядке. Турбо-Пролог имеет встроенный предикат concat, который выполняет соединение (конкатенацию) двух строк. Его син­таксис следующий:

concat(Input_stringl, Input_string2, Output_String).

Объекты Input_stringl и Input_string2 являются двумя входными строка­ми. Объект Output_string есть объединенная выходная строка. Например,

concat("TOOAY", "TOMORROW". S).

означивает переменную S строкой "TODAYTOMORROW".

Программа Concatl (рис. 7) демонстрирует применение конкатена­ции строк. Эта программа использует внутреннюю цель. Правило print_strings соединяет строки и выводит на печать результат конкатенации. Результат работы программы показан на рис. 93.

Программа Concat2 (рис.9) является модификацией программы Concatl. В этой программе как входные, так и выходные строки представле­ны переменными с односимвольными именами: R, S, Т, U, V, W, X, Y, Z, А, В, С. Эти переменные используются как аргументы предиката concat. Данная форма использования предиката конкатенации короче и удобнее в случае повторяющихся операций конкатенации. Результаты работы программ Concatl и Concat2 идентичны.

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

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

/* concat(cтpoкal,строка2,строкаЗ) */

predicates

print_strings

goal

print_strings.

clauses

print_strings :-

concat("Turbo Prolog","is fast!",R),

nl,nl,write(R),

concat("Every body loves ",

"somebody sometime.",S),

n1,nl,write(S),

concat("Artificial',

"Intelligence.",T),

nl,nl,write(T),

concat("A thing of beauty ",

"is a joy forever.",U),

concat("Turbo Prolog","is fast!",R),

nl.nl,write(R),

nl,nl,write(U),nl,nl.

Рис. 7. Программа Concatl

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

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

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

/* concat(cтpoкal,строка2,строкаЗ) */

predicates

print_str1ngs

goal

print_strings.

clauses

print_strings :-

nl,nl,

0 = "Turbo Prolog".

P = " Is fast !".

concat(O,P,Q),

write(Q),nl,nl,

R = "Every body loves ",

S = "somebody sometime.",

concat(R,S,T),

write(T),nl,nl,

U = "Artificial",

V = "Intelligence",

concat(U,V,W),

write(W),nl,nl,

X = "A thing of beauty ",

Y = "Is a Joy forever.",

concat(X,Y,Z),

write(Z),nl,nl.

Рис. 9. Программа Concat2