Списки, рекурсия - Prolog

Узнай цену своей работы

Формулировка задачи:

Задача 1. Определите предикат, удаляющий из списка последний элемент. Задача 2. Определите предикат, удаляющий из каждый второй элемент.

Решение задачи: «Списки, рекурсия»

textual
Листинг программы
  1. domains
  2. int=integer
  3. intl=int*
  4.  
  5. predicates
  6. butLast(intl,intl)
  7. delByNum(intl,intl,int,int)
  8. delEven(intl,intl)
  9.  
  10. clauses
  11. butLast([_],[]).
  12. butLast([A|T],[A|R]) :- butLast(T,R).
  13.  
  14. delByNum([],[],_,_).
  15. delByNum([H|T],[H|R],N,P) :- P < N, P1=P+1, delByNum(T,R,N,P1).
  16. delByNum([_|T],R,N,N)     :- delByNum(T,R,N,1).
  17.  
  18. delEven(X,Y) :- delByNum(X,Y,2,1).

Объяснение кода листинга программы

  1. Списки представлены как intl (int*), то есть как упорядоченные последовательности целых чисел.
  2. В коде есть три предиката: butLast, delByNum, delEven.
  3. butLast([_],[]). - пустой список не содержит последнего элемента.
  4. butLast([A|T],[A|R]) :- butLast(T,R). - последний элемент списка T становится первым элементом списка R.
  5. delByNum([],[],,). - если список пустой, то он не содержит элемента с заданным номером (N,P).
  6. delByNum([H|T],[H|R],N,P) :- P < N, P1=P+1, delByNum(T,R,N,P1). - элемент с номером N в списке T становится элементом с номером P1 в списке R.
  7. delByNum([_|T],R,N,N) :- delByNum(T,R,N,1). - последний элемент списка T становится первым элементом списка R, если его номер равен N.
  8. delEven(X,Y) :- delByNum(X,Y,2,1). - список X без четных чисел становится списком Y.
  9. В коде используется рекурсия для обработки списков.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.375 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы