Мы определяем list_nextmin_gt/3
на основе list_minnum/2
, tfilter/3
и dif/3
:
list_nextmin_gt(Zs0, M, Zs) :-
list_minnum(Zs0, M0),
tfilter(dif(M0), Zs0, Zs1),
( M0 = M,
Zs = Zs1
; list_nextmin_gt(Zs1, M, Zs)
).
Пример запроса:
?- list_nextmin_gt([3,2,1,2,3], M, Rest).
( M = 1, Rest = [3,2,2,3]
; M = 2, Rest = [3,3]
; M = 3, Rest = []
; false
).
Или, если вас не интересуют остальные пункты списка, просто напишите:
?- list_nextmin_gt([3,2,1,2,3], M, _).
( M = 1
; M = 2
; M = 3
; false
).