Предикат, составляющий список символов, которые входят одновременно в обе данных строки - 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.