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

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

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

Просмотр 2 сообщений - с 1 по 2 (из 2 всего)
  • Автор
    Сообщения
  • #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), !.

    Вложения:
    Вы должны войти для просмотра вложений.
Просмотр 2 сообщений - с 1 по 2 (из 2 всего)

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