Дано предложение на русском языке. Построить список слов предложения - 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
для обработки оставшейся части списка.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д