Лифп / LIFP_lab5
.docxМИНИСТЕРСТВО ОБРАЗОВАНИЯ и НАУКИ
КЫРГЫЗСКОЙ РЕСПУБЛИКИ
КЫРГЫЗСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ им. И. РАЗЗАКОВА
ФАКУЛЬТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ
КАФЕДРА «ИНФОРМАТИКА И ВЫЧИСЛИТЕЛЬНАЯ ТЕХНИКА»
Отчет
Лабораторная работа 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),!. %и продолжаю поиск в этом остатке(без вывода текущего слова)