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

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

Главная Форумы Программирование Помощь с решением задач на Prolog Задачи на списки SWI Prolog: Изьять из списка N наименьших элементов

Помечено: , ,

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

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

    Zzz
    Участник

    Из списка изъять N найменьших его элементов 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).

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