Предикат, заменяющий два подряд идущих одинаковых элемента одним - Prolog
Формулировка задачи:
помогите решить задачу "Создайте предикат, заменяющий в исходном списке два подряд
идущих одинаковых элемента одним."
Решение задачи: «Предикат, заменяющий два подряд идущих одинаковых элемента одним»
textual
Листинг программы
- domains
- element=integer
- list=element*
- predicates
- input(list)
- output(list)
- shift(list,list) /*сдвиг вправо*/
- getlast(list,element,element) /*получение последнего элемента*/
- deletelast(list,list) /*удаление последнего элемента*/
- parLen(list) /*четность длины списка*/
- chArPL(list,integer) /*проверка на арифметическую прогрессию списка*/
- getLenList(list,integer) /*определение длины списка*/
- chpel(list,list) /*замена двух идущих подряд символов - одним */
- %start
- clauses
- input([X|T]):-
- write("ввести элемент - y/n: "),
- readchar(YN),nl,
- YN<>'n',
- write("Введи элемент: "),
- readInt(X),nl,
- input(T).
- input([]):-
- write("ввод закончен"),nl.
- output([]).
- output([H|T]):-
- write(H),write(" "),
- output(T).
- shift([],[]).
- shift([H|T],[E|L]):-
- getlast([H|T],_,E),
- deletelast([H|T],L).
- getlast([],E,E).
- getlast([H|T],_,E):-
- getlast(T,H,E).
- deletelast([_|[]],[]).
- deletelast([H|T1],[H|T2]):-
- deletelast(T1,T2).
- parLen([]).
- parLen([_,_|Tail]):-parLen(Tail).
- chArPL([_|[]],_).
- chArPL([H,T|TT],N):-
- N=T-H,
- chArPL([T|TT],N).
- getLenList([],N):-N=0.
- getLenList([_|L],N):-
- getLenList(L,N1),
- N=N1+1.
- chpel([],_).
- chpel([Hi|[Hii|Tii]],[Ho|To]):-
- Hi=Hii, Ho=Hi, chpel([Hi|Tii],[Ho|To]).
- chpel([Hi|Ti],[Hi|To]):-
- chpel(Ti,To).
- goal
- L=[1,1,2,3,4,4,5,6,6],
- output(L),nl,
- chpel(L,L1),
- output(L1),nl.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д