Пролог: поиск максимального значения из списка фактов

В Прологе вы можете найти максимальное значение из списка фактов, используя различные методы. Вот несколько примеров:

  1. Рекурсивный подход:

    % Base case: maximum of a single element is the element itself
    max_list([X], X).
    % Recursive case: compare the head of the list with the maximum of the tail
    max_list([H|T], Max) :-
    max_list(T, MaxTail),
    Max is max(H, MaxTail).

    Пример использования: ?- max_list([1, 5, 3, 8, 2], Max).Вывод: Max = 8

  2. Встроенный предикат (max_list/2):
    Пролог предоставляет встроенный предикат max_list/2, который находит максимальный элемент из список.

    % Example usage
    ?- max_list([1, 5, 3, 8, 2], Max).

    Выход: Макс = 8

  3. Использование findall/3и max_list/2:

    % Use findall to create a list of all elements, then use max_list to find the maximum
    max_list_findall(List, Max) :-
    findall(X, member(X, List), Elements),
    max_list(Elements, Max).

    Пример использования: ?- max_list_findall([1, 5, 3, 8, 2], Макс.Вывод: Max = 8

  4. Использование предиката sort/2:

    % Sort the list in ascending order and take the last element
    max_list_sort(List, Max) :-
    sort(List, Sorted),
    last(Sorted, Max).

    Пример использования: ?- max_list_sort([1, 5, 3, 8, 2], Макс.Вывод: Макс = 8