Предикат, который проверяет тупик - PullRequest
0 голосов
/ 17 марта 2020

Я просто хочу, чтобы кто-то помог мне в этом, потому что мне нужна функция, которая может проверять тупик для приведенного ниже кода. Итак, проверив тупик, мы получим порядок выполнения процесса. Если он в безопасном состоянии без тупика и если есть тупик, просто распечатайте 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
% ).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...