» » »

Опишите предикат, определяющий количество возрастающих подпоследовательностей


Вариант 1 (который вхитовский, работает):

% Bilet2
% Patched by JamshyT 14.01.13
% Special for AISTd-31 :)
% To start type: jstart.
podposl([],[]).
podposl([X|L1],[X|L2]):-podposl(L1,L2).
podposl(L1,[Y|L2]):-podposl(L1,L2).

vozrast([]).
vozrast([X]).
vozrast([X,Y|L]):- X<Y, vozrast([Y|L]).

vozrastpodposl(L1,L2):-podposl(L1,L2), vozrast(L1).

kol(0,[]).
kol(K,[Y|L]):- kol(K1,L), K is K1+1.

kvp(L,K,L1):-setof(X,vozrastpodposl(X,L),L1),kol(K,L1).
jstart:- write(' Vvedite spisok L1: '),nl,read(LJAM1),nl,
write(' Vivod spiska L1= '),
write(LJAM1),nl,
kvp(LJAM1,Z1,Z2),
write(' Result= '),
write(Z1),nl,
write(Z2).


Вариант 2 (сторонний источник):

% Bilet2 Variant 2
% Patched by JamshyT 14.01.13
% Special for AISTd-31 :)
% To start type: jstart.
%Опишите предикат, определяющий количество возрастающих подпоследовательностей
%заданного списка.   %
%%%%%%%%%%%%%%%%%%%%%%   кол-во  элементов   списка %%%%%%%%%%%%%%%%%%%%%%%%%%%                          
 
     kol_il(0,[]).
     kol_il(K,[X|L]):-kol_il(S1,L),K is 1+S1.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   

    min_il(X,[X]).
    min_il(X,[X|L]):- min_il(Y,L),Y>=X.
    min_il(X,[Y|L]):- min_il(X,L), Y>X.
  

         vosr_posl([]).
         vosr_posl([X]).
         vosr_posl([X|L]):-min_il(Y,L),
                       X=<Y,
                      vosr_posl(L).
 
   %**********************************************************************%                          
   %   подпоследовательность- это части  списка ,элементы  должны  быть   %
   %                            в    той    же    последовательности, но  %                        
   %                            не обязательно   стоящие  pядом .         %
   %          podposled  ( подпослед,  данный список)                     %              
   %**********************************************************************%
 
      podposled([],[]).
      podposled(X,[_|T]):-   
                            podposled(X,T).
                         
         podposled([X|T],[X|R]):-podposled(T,R).
                     
  
     vosr_podposled(L,P):-podposled(P,L),
                   vosr_posl(P).

spis_vosr_podposled(L,S,K):- setof(P,vosr_podposled(L,P),S), 
kol_il(K,S).

%patch start  
jstart:- write(' Vvedite spisok L: '),nl,read(LJAM),nl,
write(' Vivod spiska L= '),
write(LJAM),nl,
write(' Result= '),
kol_il(LJAM,Z).


Друзья! Приглашаем вас к обсуждению. Если у вас есть своё мнение, напишите нам в комментарии.