Вычислить число элементов списка после элемента с заданным значением - Prolog

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

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

Помогите с задачкой пожалуйста, ее описание в заголовке. Насколько я понимаю, нужно создать список из чисел, ввести определенное число из этого списка, в результате чего появится число элементов, которое находится после введенного элемента.

Решение задачи: «Вычислить число элементов списка после элемента с заданным значением»

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

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

  1. В начале кода определяются два домена: int - целочисленный, intl - int*, то есть указатель на целочисленный.
  2. Затем определяются два предиката: len - принимает два аргумента, первый - список, второй - количество элементов в списке.
  3. И предикат count_after - принимает три аргумента, первые два - список, третий - значение элемента, после которого нужно посчитать количество элементов.
  4. В следующих двух утверждениях задаются начальные условия для работы программы.
  5. В первом утверждении пустой список считается имеющим длину 0.
  6. Во втором утверждении для непустого списка (T) рекурсивно вызывается функция len, передавая в нее список T и текущую длину N. При этом значение N1, полученное в результате вызова функции len для списка T, присваивается значению N, увеличивая его на единицу.
  7. В третьем утверждении предиката count_after для списка [H|T], значение H и переменная L (количество элементов после H) рекурсивно вызывается функция len, передавая в нее список T и текущую длину L. При этом значение N1, полученное в результате вызова функции len для списка T, присваивается значению L, увеличивая его на единицу.
  8. В четвертом утверждении предиката countafter для списка [|T] (неравенство H используется для вызова рекурсивной функции count_after для списка T), значение H и переменная L (количество элементов после H) рекурсивно вызывается функция count_after, передавая в нее список T и текущую длину L.

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


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

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

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