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

      Комментарии к записи Ответ в теме: Минимальный и предминимальный элементы и их позиции отключены
#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 раза больше временных буферов, поэтому выглядит все это так не красиво.