%%% best-fail.pl
%%% Prosty program ilustrujacy szukanie rozwiązania optymalnego z wykorzystaniem pętli repeat-fail oraz mechanizmu retract-assert do zapamiętania rozwiązania bieżącego


:- dynamic(temp/1).

% Przykładowe rozwiązania
  res(1).
  res(2).
  res(3).
  res(4).
  res(5).
  res(4).
  res(3).
  res(7).

% Ustalenie p. odniesienia w pamięci
set:- res(M),!,assert(temp(M)).

% Pętla repeat-fail dla znalezienia rozwiazania.
best(X):-
  set,
  res(X),
  temp(M),
  X>M,
  retract(temp(M)),
  assert(temp(X)),
  write(X),nl,
  fail.
best(X):-temp(X).  

search:- 
  clear,
  best(X),
  write('X_best= '),write(X),nl.

% Czyszczenie pamięci
clear:- retract(temp(_)),fail.
clear.  


%%% eof
  
