Предикат select для выбора элемента из списка

      Комментарии к записи Предикат select для выбора элемента из списка отключены

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

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

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

    questioner
    Участник

    Нужна реализация для Visual Prolog предиката select (есть в стандартной библиотеке SWI Prolog). Предикат должен по-очереди перебирать элементы списка, но в отличии от member — возвращать не только значение, но и оставшуюся часть списка.

  • #2632

    Предикат принимает на вход список, отделяет от него первый элемент и хвост. Если значение элемента совпадает с искомым — возвращается значение и хвост. В остальных случаях — хвост обрабатывается рекурсивно, а к полученному результату дописывается первый первый элемент:

    select(Elem, [Elem|Tail], Tail).
    select(Elem, [Head|Tail], [Head|ResultTail]):-
      	select(Elem, Tail, ResultTail).

    Если искомый элемент списка не задан — предикат можно использовать для того, чтобы по очереди перебрать все элемент списка.
    Если же элемент задан — с помощью предиката можно удалить первое вхождение элемента из списка:

    delete_single_element(List, Element, ListWithoutElement):-
      	select(Element, List, ListWithoutElement), !.

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