» » »

Описать предикат список_очередников(L). L-список людей, стоящих в очереди ( в том порядке, как они стоят в очереди). Очередь задана при помощи фактов «стоит_сразу_за(X,Y)».

% Bilet10
% Patched by JamshyT 14.01.13
% Special for AISTd-31 :)
% To start type: jstart.
stayAfter(1,2).
stayAfter(2,3).
stayAfter(3,4).
stayAfter(4,5).
stayAfter(5,6).
stayAfter(6,7).

pr(Z):-pr(X,Z).
pr(X,Z):-stayAfter(X,Y),pr(Y,Z1),Z=[X|Z1],!.
pr(X,[X]).
jstart:- write(' BBegu pr(X,Y) gJL9 vivoda o4epegu.'),nl.

дополнительно...:

%16. Определить предикат в_одной_очереди(A,B) -
% A и B стоят в одной очереди. Очереди заданы при помощи предикатa
%стоит_сразу_за(X,Y) - X стоит сразу за Y в очереди.
%Предикат стоит_сразу_за(X,Y) описан

st_za(a,b).
st_za(b,c).
st_za(c,d).
st_za(e,g).
st_za(g,h).
st_za(h,k).
st_za(l,p).

per(A):-st_za(_,A), not st_za(A,_).
posl(A):-st_za(A,_), not st_za(_,A).

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


dobv_kon(X,[],[X]).
dobv_kon(X,[Y|L],[Y|L1]):-dobv_kon(X,L,L1).


spis(A,B,L):-spis(A,B,[A],L).

spis(A,B,L,L):-posl_il(L,B).
spis(A,B,L1,L):-posl_il(L1,Z),Z\=B,st_za(Z,X),dobv_kon(X,L1,L2), spis(A,B,L2,L).


 ochered(L):-per(B),posl(A),spis(A,B,L).
 
 member(X,[X|_]).             
 member(X,[Y|L]):- member(X,L).      
 
v_odn_och(A,B):- ochered(L), member(A,L),member(B,L),A\=B.

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