Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лифп / LIFPLAB4

.docx
Скачиваний:
6
Добавлен:
27.01.2022
Размер:
23.33 Кб
Скачать

МИНИСТЕРСТВО ОБРАЗОВАНИЯ и НАУКИ

КЫРГЫЗСКОЙ РЕСПУБЛИКИ

КЫРГЫЗСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ им. И. РАЗЗАКОВА

ФАКУЛЬТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ

КАФЕДРА «ИНФОРМАТИКА И ВЫЧИСЛИТЕЛЬНАЯ ТЕХНИКА»

Отчет

Лабораторная работа 5

Бишкек 2020

15. Повторить вхождение всех слов, которые заканчиваются на ту же букву,

на которую начинается первое слово.

predicates

%!---------------------------------------------------------------------------------------------

gtwrd(string,string,string,string)

% i,i,o,o

% выделение слова

% #формат: исходная строка,"", слово, остаток строки

% #использует: ---

%!---------------------------------------------------------------------------------------------

%!---------------------------------------------------------------------------------------------

substr(string,string,integer)

% i,i,i

% ищет подстроку в строке, завершается успешно, если подстрока найдена

% #формат: исходная строка, подстрока,0

% #использует: ---

%!---------------------------------------------------------------------------------------------

p(string) %i

goal

write("String: "),

readln(S),

p(S),

readint(_). %задержка(ожидание <ENTER>)

clauses

substr(_,"",_):-!. %подстрока закончилась - значит найдена

substr("",_,_):-!,fail. %если же ищем в пустой строке - то завершаем неудачей

substr(S,SS,_):- %иначе:

frontchar(S,SC,S_), %выделяем первый символ строки

frontchar(SS,SC,SS_), %если он совпал с первым символом подстроки

substr(S_,SS_,1). %проверям рекурсивно остатки строк

substr(S,SS,0):- %иначе

frontchar(S,_,S_), %получаем остаток строки от выделения символа

substr(S_,SS,0). %ищем подстроку в этом остатке

gtwrd(S,W,E,T):-

frontchar(S,C,S1), %выделяю символ

NOT(C=' '), %если это не пробел

str_char(SS,C), %преобразую символ в строку

concat(W,SS,R), %прикрепляю символ к результату

gtwrd(S1,R,E,T),!.

gtwrd(S,W,W,R):- %иначе(если это был пробел) возвраю результат

frontchar(S,_,R).

gtwrd(S,W,W,S).

p(""):-!. %в пустой строке нечего искать

p(S):-

gtwrd(S,"",W,SS), %выделяю слово W, и остаток строки SS

frontchar(W,C,SSS), %выделяю первый символ слова и остаток от выделения слова SSS

str_char(SC,C), %преобразую его в строку

substr(SS,SC,0), %ищу символ в остатке строки

write(W),nl, %если найден - вывожу слово

p(SS),!; %и продолжаю поиск слов в остатке строки

gtwrd(S,"",_,SS), %иначе, получаю опять получаю остток строки от выделения слова

p(SS),!. %и продолжаю поиск в этом остатке(без вывода текущего слова)

Соседние файлы в папке Лифп