Предикат, составляющий список символов, которые входят одновременно в обе данных строки - Prolog
Формулировка задачи:
Создайте предикат, составляющий список символов, которые входят одновременно в обе данных строки.
Решение задачи: «Предикат, составляющий список символов, которые входят одновременно в обе данных строки»
textual
Листинг программы
predicates isin(char,string) intersect(string,string,string) clauses isin(_,"") :- fail. isin(C,S) :- frontchar(S,C,_),!. isin(C,S) :- frontchar(S,_,RS),isin(C,RS). intersect("",_,""). intersect(A,B,R) :- frontchar(A,A1,RA), isin(A1,B), intersect(RA,B,RR), frontchar(R,A1,RR), !. intersect(A,B,R) :- frontchar(A,_,RA), intersect(RA,B,R). goal intersect("asdfg","kjhgfd",R),write(R),nl.
Объяснение кода листинга программы
isin(char,string)
- проверяет, содержится ли символ в строке. Если да, то возвращает символ, если нет - возвращает пустую строку.intersect(string,string,string)
- находит пересечение трех строк. Если строки пустые, возвращает пустую строку.isin(_,``)
:- fail. - если первая строка пустая, то возвращает ошибку.isin(C,S) :- frontchar(S,C,_),!.
- если первый символ строки S совпадает с C, то возвращает C, иначе возвращает вызов функции isin для оставшейся части строки S.isin(C,S) :- frontchar(S,_,RS),isin(C,RS).
- если первый символ строки S не совпадает с C, то возвращает вызов функции isin для оставшейся части строки S.intersect(``,_,``)
- если первая строка пустая, то возвращает пустую строку.intersect(A,B,R) :- frontchar(A,A1,RA), isin(A1,B), intersect(RA,B,RR), frontchar(R,A1,RR), !.
- если первый символ строки A совпадает с символом в строке B, то возвращает этот символ, иначе возвращает вызов функции intersect для оставшейся части строки A.intersect(A,B,R) :- frontchar(A,_,RA), intersect(RA,B,R).
- если первый символ строки A не совпадает с символом в строке B, то возвращает вызов функции intersect для оставшейся части строки A.intersect(
asdfg,
kjhgfd,R),write(R),nl.
- выводит пересечение строкasdfg
иkjhgfd
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д