我只希望有人对此提供帮助,因为我想要一个可以检查以下代码的死锁的函数。因此,通过检查死锁,我们将获得流程的执行顺序。如果它处于安全状态且没有死锁,并且存在死锁,则只需打印出false。但是我无法在Prolog中做到这一点,所以有人可以帮我修改下面的代码,以使其在出现死锁时打印为假吗?
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
% ).