Выяснить, есть ли в слове Х и У одинаковые символы - Prolog
Формулировка задачи:
Составьте программу выясняющую есть ли в слове Х и У одинаковые символы
Решение задачи: «Выяснить, есть ли в слове Х и У одинаковые символы»
textual
Листинг программы
domains
str=string
predicates
isIn(char,str)
task(str,str)
clauses
isIn(_,"") :- fail.
isIn(C,Q) :- frontchar(Q,C,_).
isIn(C,Q) :- frontchar(Q,Z,T), C<>Z, isIn(C,T).
task("",_) :- fail.
task(X,Y) :- frontchar(X,A,_), isIn(A,Y).
task(X,Y) :- frontchar(X,A,R), not(isIn(A,Y)), task(R,Y).
Объяснение кода листинга программы
- В коде используется логический язык программирования Prolog.
- В первой строке объявлено множество символов, которые могут быть использованы в словах -
str=string. - Далее идут определения двух предикатов -
isInиtask. - Предикат
isInпроверяет наличие символа в строке. - Предикат
taskвыполняет задачу сравнения двух строк. - В первой группе правил для предиката
isInпроверяется пустая строка, и если она пустая, то выполняется действиеfail. - Во второй группе правил для предиката
isInидет проверка на наличие символа в строке, используя функциюfrontchar. - В третьей группе правил для предиката
isInидет проверка на различие символов и рекурсивный вызов функцииisIn. - В первой группе правил для предиката
taskпроверяется пустая строка, и если она пустая, то выполняется действиеfail. - Во второй группе правил для предиката
taskидет проверка на наличие символа в первой строке, используя функциюfrontchar, и если символ найден, то выполняется рекурсивный вызов функцииtaskдля оставшейся части строк. - В третьей группе правил для предиката
taskидет проверка на отсутствие символа в первой строке, используя отрицаниеnot, и если символ отсутствует, то выполняется рекурсивный вызов функцииtaskдля оставшейся части строк.