Я просто хочу, чтобы кто-то помог мне в этом, потому что мне нужна функция, которая может проверять тупик для приведенного ниже кода. Итак, проверив тупик, мы получим порядок выполнения процесса. Если он в безопасном состоянии без тупика и если есть тупик, просто распечатайте false. Но я не смог сделать это в Прологе, так что кто-нибудь может мне помочь изменить приведенный ниже код, чтобы он печатался как ложный, если у него тупик?
processes([1,2,3,4]).
request(1,r1).
request(3,r2).
allocated(1,r2).
allocated(2,r1).
allocated(3,r1).
allocated(4,r2).
findrequested([],[]).
findrequested([H|T],[X|R]) :-
allocated(H,_),
request(H,_),
X is H,
findrequested(T,R).
findrequested([H|T],R) :-
findrequested(T,R).
findNotrequested([],[]).
findNotrequested([H|T],[V|R]) :-
allocated(H,_),
\+ request(H,_),
V is H,
findNotrequested(T,R).
findNotrequested([H|T],R) :-
findNotrequested(T,R).
results(Res):-
processes(P),
findrequested(P,R),
findNotrequested(P,M),
% checkDeadlock(M),
list_empty(M),
append(M,R,Res).
% checkDeadlock(L):-
%list_zerolength(L,E),
%E = true .
%list_zerolength(List, Empty) :-
% length(List, Len),
% ( Len == 0
% -> Empty = true
% ; Empty = false
% ).