Из списка целых чисел исключить min_member

      Комментарии к записи Из списка целых чисел исключить min_member отключены

В этой теме 1 ответ, 2 участника, последнее обновление  Васильев Владимир Сергеевич 2 года/лет, 5 мес. назад.

  • Автор
    Сообщения
  • #1929

    questioner
    Участник

    В SWI Prologе требуется из списка целых чисел A1, А2, …, AN исключить все элементы, совпадающие со значением [(A_max + A_min + A_ср) / 3].

  • #1930

    Получить максимальный и минимальный элементы можно стандартными предикатами min_list и max_list. Если стандартные использовать нельзя — можно написать свою собственную реализацию:

    min_list([], _Min):-!, fail.
    min_list([Head|Tail], TailMin):-
      min_list(Tail, TailMin), TailMin < Head, !.
    min_list([Head|_Tail], Head).

    В пустом списке минимального элемента нет, такие входные данные являются некорректными, правило завершается неудачей.
    В противном случае список разделяется на первый элемент (голову) и остальные (хвост). Выполняется рекурсивный поиск минимума среди элементов хвоста.
    Если хвост содержит элементы меньше первого — функция возвращает значение, полученное в результате рекурсивного вызова, в противном случае возвращается первый элемент.

    Чтобы вычислить и удалить значение среднего элемента списка, используйте стандартные предикаты sum_list, length и delete.

Для ответа в этой теме необходимо авторизоваться.