Ответ в теме: SWI Prolog: Изьять из списка N наименьших элементов

      Комментарии к записи Ответ в теме: SWI Prolog: Изьять из списка N наименьших элементов отключены
#3976

Если я правильно понял вопрос, то надо отсортировать список любым методом, например пузырьковым алгоритмом. В SWI Prolog есть встроенный предикат sort(+List, -Sorted).

Затем остается выбрать N первых элементов из него. Решить вторую часть можно следующим образом:

get_first_n(List, N, FirstN):-
  append(FirstN, _Tail, List),
  length(FirstN, N).

Функция append разбивает список, заданный третьим аргументом на подсписки всеми возможными способами. Однако, все способы нас не интересуют, нам ведь нужен только тот вариант, когда длина первого списка равна N – для азадания такого условия мы используем предикат length.

Предикаты append и length в SWI Prolog являются встроенными, но в других диалектах вам нужно реализовать их самостоятельно. Посмотрите как это сделать в статье Списки в Prolog. Теория. Примеры.

Не заметил, что нужно изъять элементы (в программе выше мы их наоборот выбрали).

rem_first_n(List, N, Last):-
  append(_FirstN, Last, List),
  length(FirstN, N).