Получить суффикс списка - Prolog

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

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

Задача - найти хвост списка указанной длины.
Почему ошибки? Если что, conc - сцепление списков.

Решение задачи: «Получить суффикс списка»

textual
Листинг программы
domains 
int=integer
intl=int*
 
predicates
len(intl,int)
cut(intl,int,intl)
suff(intl,int,intl)
 
clauses
len([],0).
len([_|T],N) :- len(T,N1), N=N1+1.
 
cut(X,0,X).
cut([_|X],N,Y) :- N1=N-1,cut(X,N1,Y).
 
suff(X,L,Y) :- len(X,LL), N=LL-L, cut(X,N,Y).

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

  1. В коде определены следующие домены: int = integer (целое число), intl = int* (список целых чисел).
  2. Также в коде определены следующие предикаты: len(intl,int) (функция, принимающая список целых чисел и возвращающая количество элементов в этом списке), cut(intl,int,intl) (функция, принимающая список целых чисел, индекс первого элемента и количество элементов, которые нужно отрезать от начала списка, и возвращающая новый список), suff(intl,int,intl) (функция, принимающая список целых чисел, индекс последнего элемента и количество элементов, которые нужно отрезать от конца списка, и возвращающая новый список).
  3. В коде присутствуют следующие утверждения (клаузы): len([],0) (если пустой список, то его длина равна 0), len([|T],N) :- len(T,N1), N=N1+1 (если список состоит не только из пустого списка, то его длина равна сумме длины первого элемента и длины оставшейся части списка минус один), cut(X,0,X) (если первый элемент списка равен нулю, то этот элемент и все последующие элементы списка до конца списка исключаются из списка), cut([|X],N,Y) :- N1=N-1,cut(X,N1,Y) (если первый элемент списка не равен нулю, то его значение и все последующие элементы списка до конца списка исключаются из списка, а в новом списке первым элементом будет являться элемент с индексом N-1), suff(X,L,Y) :- len(X,LL), N=LL-L, cut(X,N,Y) (если длина списка равна L, то можно получить список, состоящий из всех элементов исходного списка, начиная с элемента с индексом N и имеющий длину LL-L).

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


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

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

9   голосов , оценка 4.222 из 5
Похожие ответы