forall-Prolog
может кто-нибудь объяснить, как должен предикат forall
чтобы найти минимальные значения в списке?
4 ответов
список L
, вы можете использовать:
member(Min,L), forall(member(N,L), N>=Min).
однако, в то время как это хорошая демонстрация forall
, это не эффективно (квадратная сложность вместо линейной).
или вы можете использовать предикат findall / 3
findall(Value, minimumValues(Value), minimumValuesList)
он возвращает список (minimumValuesList) с элементами (все минимальные значения, справа).
почему вы хотите использовать forall/2
найти минимальное?!
для стандартного (линейного) решения для выбора минимального / максимального/... элемент из списка посмотрите на SWI-Prolog min_list/2
:
?- listing(min_list).
lists:min_list([], A, A).
lists:min_list([A|C], B, E) :-
D is min(A, B),
min_list(C, D, E).
lists:min_list([B|A], C) :-
min_list(A, B, C).
просто использовать это:
minlist([X], X).
minlist([H|T], Min) :-
minlist(T, Tmin),
Min is min(H, Tmin), !.