Удалить предпоследний элемент списка на Prolog

      Комментарии к записи Удалить предпоследний элемент списка на Prolog отключены

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

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

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

    questioner
    Участник

    Решите задачу на Visual Prolog 5.2:

    создайте предикат, удаляющий предпоследний элемент списка

    Дополнительное требование преподавателя — предикат должен обрабатывать как списки целых чисел, так и дробных, а также символов.

  • #3049

    domains
    ilist = integer*
    rlist = real*
    slist = symbol*
    predicates
    rem_penult(ilist, ilist)
    rem_penult(rlist, rlist)
    rem_penult(slist, slist)
    clauses
    rem_penult([_Penult, Last], [Last]):-!.
    rem_penult([Head|Tail], [Head|TailResult]):-
    rem_penult(Tail, TailResult).
    goal 
    RList = [3.14, 5.45, 3.34],
    rem_penult(RList, RResult).

    Для того, чтобы программа на Visual Prolog работала со списком, соответствующий тип данных нужно объявить в секции domains — мы объявили там списки трех видов.
    Чтобы функция могла принимать на вход разные типы аргументов, соответствующие объявления нужно добавить в секцию predicates.
    Сама функция является рекурсивной. От начала списка отделяются элементы до тех пор, пока задача не станет элементарной — для списка из двух элементов функция должна вернуть список из последнего элемента. На возврате из рекурсии отделенные от начала списка элементы добавляются к результату.

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