Stik dveh seznamov v prologu

Iz E-študij, proste zakladnice študentskega znanja

Skoči na: navigacija, iskanje

Stik dveh seznamov v prologu predstavlja način kako iz dveh ločenih seznamov ustvarimo enega samega tako, da prvemu na konec repa dodamo še drugi seznam.

?- stik([a,b,c],[d,e],S).

S=[a,b,c,d,e]
S=[a,b,c,d,e]= [a,b,c|[d,e]] = [a,b,c]|[]]
                                        ^-v prazni seznam vstavimo 2. seznam
[H][    T    ] [ y ]
 -----x------  --y--

[H][    T        Y ]
stik([],Seznam,Seznam). %robni primer, če je en seznam prazen je drugi seznam že rezultat
stik([Glava|Rep],Seznam2,[Glava|Rep3]):-
  stik(Rep,Seznam2,Rep3).


Primeri

?- stik([a,b,c],[d,e],S).

S = [a,b,c,d,e];

no
?- stik(S1,S2,[a,b,c]).

S1 = [],
S2 = [a,b,c] ? ;

S1 = [a],
S2 = [b,c] ? ;

S1 = [a,b],
S2 = [c] ? ;

S1 = [a,b,c],
S2 = [] ? ;

no
?- stik(S,_,_).

S = [] ? ; 

S = [_A] ? ;

S = [_A,_B] ? ;

S = [_A,_B,_C] ? ;

S = [_A,_B,_C,_D] ? 

yes

Iskanje poljubnega elementa v seznamu:

?- stik(_,[X|_],[a,b,c]).

X = a ? ;

X = b ? ;

X = c ? ;

no


?- stik(_,S1,[a,b,c]), stik(Pods,_,S1).

S1 = [a,b,c],
Pods = [] ? ; 

S1 = [a,b,c],
Pods = [a] ? ;

S1 = [a,b,c],
Pods = [a,b] ? ;

S1 = [a,b,c],
Pods = [a,b,c] ? ;

S1 = [b,c],
Pods = [] ? ;

S1 = [b,c],
Pods = [b] ? ;

S1 = [b,c],
Pods = [b,c] ? ;

S1 = [c],
Pods = [] ? ;

S1 = [c],
Pods = [c] ? ;

S1 = [],
Pods = [] ? ;

no

Lahko definiramo novo relacijo

podseznam(P,S):-
  stik(_,S1,S),
  stik(P,_,S1).
?- podseznam(Pods,[a,b,c]).

Pods = [] ? ;
Pods = [a] ? ;
Pods = [a,b] ? ;
Pods = [a,b,c] ? ;
Pods = [] ? ;
Pods = [b] ? ;
Pods = [b,c] ? ;
Pods = [] ? ;
Pods = [c] ? ;
Pods = [] ? ;
no


?- stik(S1,[a,b],S).

S = [a,b],
S1 = [] ? ;

S = [_A,a,b],
S1 = [_A] ? ;

S = [_A,_B,a,b],
S1 = [_A,_B] ? ;

S = [_A,_B,_C,a,b],
S1 = [_A,_B,_C] ? ;

S = [_A,_B,_C,_D,a,b],
S1 = [_A,_B,_C,_D] ? 

yes
Osebna orodja
Imenski prostori
Različice
Dejanja
navigacija

Tiskanje/izvoz
orodja