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