Строки
.docxМИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ КЫРГЫЗСКОЙ РЕСПУБЛИКИ
КЫРГЫЗСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ
УНИВЕРСИТЕТ ИМ. И. РАЗЗАКОВА
Лабораторная работа
Бишкек 2021
Работа со строками
Вариант №7
Найти в тексте все слова перевертыши и вывести их на экран.
Фото результат:
Листинг кода:
DOMAINS
file = input; output
wordlist = mword*
mword = string
charlist = char*
PREDICATES
open_files()
close_files()
convert_file()
nondeterm repfile(FILE)
string_wordlist(string, wordlist)
string_chlist(string, charlist)
palindrom(charlist)
reverse(charlist, charlist, charlist)
nondeterm find_list(wordlist)
nondeterm write_pal(charlist)
write_charlist(charlist)
CLAUSES //Предикат преобразует строку в список из отдельных слов, разделителем является пробел
string_wordlist(S, [H|T])
fronttoken(S, H, S1),
!,
string_wordlist(S1, T).
string_wordlist(_, []).
// Предикат позволяет считать по строчно текстовый файл
repfile(_).
repfile(FILE) :-
not(eof(FILE)),
repfile(FILE).
//Преобразование строки в список символов (уже одно слово)
string_chlist("", []) :- !.
string_chlist(S, [H|T]) :-
frontchar(S, H, S1),
string_chlist(S1, T).
//Проверка на то, является ли список символов палиндромом из трех или больше символов
palindrom(L) :-
L = [_, _, _|_],
reverse(L, [], L).
//Переворачиваем список символов
reverse([A|L], S, Rev) :-
reverse(L, [A|S], Rev).
reverse([], L, L).
//Проверка на палиндром, если он то записываем в файл
write_pal(L) :-
palindrom(L),
!,
write_charlist(L), nl.
write_pal(_).
//Записываем список символов как слова
write_charlist([]) :- !.
write_charlist([H|T]) :-
write(H),
write_charlist(T).
//По элементный перебор списка слов
find_list([]) :- !.
find_list([H|T]) :-
string_chlist(H, ChWord),
write_pal(ChWord),
find_list(T).
//Построчное чтение и поиск палиндромов в строке
convert_file :-
repfile(input),
readln(Ln),
string_wordlist(Ln, List),
find_list(List),
fail.
convert_file.
//Открытие файлов и конвертация палиндромов
open_files() :-
openread(input, "E:\\text.txt"),
readdevice(OldIn),
readdevice(input),
openwrite(output, "E:\\palindroms.txt"),
writedevice(OldOut),
writedevice(output),
convert_file,
writedevice(OldOut),
readdevice(OldIn).
//Закрываем файл
close_files() :-
closefile(input),
closefile(output).
GOAL
open_files, close_files.