Предикат, заменяющий два подряд идущих одинаковых элемента одним - 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.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.889 из 5
Похожие ответы