Форалл - Пролог - PullRequest
       19

Форалл - Пролог

7 голосов
/ 12 декабря 2010

Может кто-нибудь объяснить, как предопределенный предикат forall должен найти минимальные значения в списке?

Ответы [ 4 ]

15 голосов
/ 12 декабря 2010

Для списка L вы можете использовать:

member(Min,L), forall(member(N,L), N>=Min).

Однако, хотя это хорошая демонстрация forall, она неэффективна (квадратная сложность вместо линейной).

4 голосов
/ 23 ноября 2012

или вы можете использовать предикат findall / 3

findall(Value, minimumValues(Value), minimumValuesList)

возвращает список (imumValuesList) с элементами (все минимальные значения, справа)

2 голосов
/ 12 декабря 2010

Почему вы хотите использовать forall/2, чтобы найти минимум?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).
0 голосов
/ 24 марта 2018

Просто используйте это:

minlist([X], X).
minlist([H|T], Min) :-
    minlist(T, Tmin),
    Min is min(H, Tmin), !.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...