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

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

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

В этой теме 1 ответ, 1 участник, последнее обновление  Васильев Владимир Сергеевич 8 мес., 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.
    Сама функция является рекурсивной. От начала списка отделяются элементы до тех пор, пока задача не станет элементарной — для списка из двух элементов функция должна вернуть список из последнего элемента. На возврате из рекурсии отделенные от начала списка элементы добавляются к результату.

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