Получить суффикс списка - 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).
Объяснение кода листинга программы
- В коде определены следующие домены: int = integer (целое число), intl = int* (список целых чисел).
- Также в коде определены следующие предикаты:
len(intl,int) (функция, принимающая список целых чисел и возвращающая количество элементов в этом списке),
cut(intl,int,intl) (функция, принимающая список целых чисел, индекс первого элемента и количество элементов, которые нужно
отрезать
от начала списка, и возвращающая новый список), suff(intl,int,intl) (функция, принимающая список целых чисел, индекс последнего элемента и количество элементов, которые нужноотрезать
от конца списка, и возвращающая новый список). - В коде присутствуют следующие утверждения (клаузы): 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).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д