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

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

Помечено: , , ,

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #2631
      @questioner

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

    • #2632
      @admin

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

      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), !.

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