Дано предложение на русском языке. Построить список слов предложения - Prolog
Формулировка задачи:
Добрый вечер!) Помогите пожалуйста с заданием..
Дано предложение на русском языке. Построить список слов предложения. Список не должен содержать повторов слов и знаков препинания.
Аргументы:
исходная строка;
список слов.
?- pred(’Что воля, что неволя...’,X).
X = [’что’,’воля’,’неволя’]
yes
?-
Решение задачи: «Дано предложение на русском языке. Построить список слов предложения»
textual
Листинг программы
p(S,L):-name(S,List),
name(' ',[SpaceCod]),
split(List,SpaceCod,Words),
p1(Words,L).
split(A,Space,[H|Tail]):-append(H,[Space|T],A),!,split(T,Space,Tail).
split(A,_,[A]).
p1([],[]).
p1([H|Tail],[H1|Tail1]):-name(H1,H),p1(Tail,Tail1).
append([],L2,L2).
append([H|T],L2,[H|Z]):-
append(T,L2,Z).
Объяснение кода листинга программы
- Вводная функция
p(S,L)принимает два аргумента:S- предложение,L- список. - Вызов функции
name(S,List)ищет в предложении имя, отделяя его от списка. - Вызов функции
name(' ',[SpaceCod])ищет в предложении пробел, отделяя его от списка. - Вызов функции
split(List,SpaceCod,Words)разбивает список на слова, используя пробел в качестве разделителя. - Рекурсивный вызов функции
p1(Words,L)обрабатывает каждое слово в списке. - Если слово пустое, то оно удаляется из списка.
- Если слово не пустое, то его имя отделяется от значения и добавляется в начало списка.
- Если список пустой, то возвращается пустой список.
- Если список не пустой, то рекурсивно вызывается функция
p1для обработки оставшейся части списка. - Функция
append([],L2,L2)добавляет все элементы изL2в конецL2. - Функция
append([H|T],L2,[H|Z])$:-append(T,L2,Z)добавляет все элементы изTв конецL2, аHв началоZ. - Если
L2пустой, то возвращаетсяL2. - Если
L2не пустой, то рекурсивно вызывается функцияappendдля обработки оставшейся части списка.