Ответ в теме: Минимальный и предминимальный элементы и их позиции

      Комментарии к записи Ответ в теме: Минимальный и предминимальный элементы и их позиции отключены
#1833

На прологе можно сделать так:

min([A, B|T], VPrevMin, IPrevMin, VMin, IMin):-
  A < B, !, min(B, 2, A, 1, 3, T, VPrevMin, IPrevMin, VMin, IMin);
  min(A, 1, B, 2, 3, T, VPrevMin, IPrevMin, VMin, IMin).
 
min(VPrevMin, IPrevMin, VMin, IMin, _, [], VPrevMin, IPrevMin, VMin, IMin):-!.
min(VPrevMin, IPrevMin, VMin, IMin, I, [H|T], RVPrevMin, RIPrevMin, RVMin, RIMin):-
  II is I + 1, (
    H =< VMin, !, min(VMin, IMin, H, I, II, T, RVPrevMin, RIPrevMin, RVMin, RIMin);
    H =< VPrevMin, !, min(H, I, VMin, IMin, II, T, RVPrevMin, RIPrevMin, RVMin, RIMin);
    min(VPrevMin, IPrevMin, VMin, IMin, II, T, RVPrevMin, RIPrevMin, RVMin, RIMin)
  ).

От предыдущего варианта отличается тем, что теперь функция возвращает 2 значения минимума и 2 индекса. В силу того, что нужно вычислить в раза больше параметров, функция должна принимать в 2 раза больше временных буферов, поэтому выглядит все это так не красиво.