Вставка в список в заданную позицию заданное число раз - Prolog

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

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

А не могли бы вы,если не сложно, посмотреть еще одну программку, которую я пытасюсь написать ? Задача: вставить в список константу X, начиная с N-ой позиции K раз .
Листинг программы
  1. domains
  2. i=integer
  3. list=i*
  4. predicates
  5. nondeterm ins_in_pos(i,list,i,list)
  6. nondeterm ins_k_times(i,list,i,i,list)
  7. clauses
  8. ins_in_pos(X,[],_,[X]).
  9. ins_in_pos(X,T,0,[X|T]) :- !.
  10. ins_in_pos(X,[H|T],N,[H|Q]) :- N1=N-1, ins_in_pos(X,T,N1,Q).
  11. ins_k_times(_, _, _, 0, _) :- !.
  12. ins_k_times(X, [H|T], N, K, [H|Q]) :- K>0, K1=K-1, N1=N-1, ins_in_pos(X,[H|T],N1,[H|Q1]), ins_k_times(X, [H|Q1], N, K1, [H|Q]).
  13. goal
  14. ins_k_times(3, [5,5,5,5,5], 2, 4, L).

Решение задачи: «Вставка в список в заданную позицию заданное число раз»

textual
Листинг программы
  1. domains
  2.   i=integer
  3.   list=i*
  4.  
  5. predicates
  6.   nondeterm ins_k_times(i,list,i,i,list)
  7.    
  8. clauses
  9.   ins_k_times(_, L, 0, 0, L) :- !.
  10.   ins_k_times(X, L, 0, K, [X|T]) :- !,
  11.     K1 = K-1,
  12.     ins_k_times(X, L, 0, K1, T).
  13.   ins_k_times(X, [H|T], N, K, [H|Q]) :-  
  14.     N1 = N-1,
  15.     ins_k_times(X, T, N1, K, Q).
  16.  
  17. goal
  18.   ins_k_times(3, [5,5,5,5,5], 3, 3, L).

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

В этом коде определена функция ins_k_times, которая добавляет элемент в список определенное количество раз. В первой строке domains объявлены типы данных:

  • i - целочисленный тип (integer)
  • list - список целочисленных значений (i*) Затем, в строке predicates, определена недетерминированная функция ins_k_times, которая принимает следующие аргументы:
  • i - целочисленное значение
  • list - список целочисленных значений
  • N - счетчик количества добавлений
  • K - счетчик количества элементов, которые нужно добавить
  • L - результат функции В строке clauses определены следующие правила:
  • Первое правило гласит, что если N и K равны нулю, то функция завершается успешно и возвращает список L.
  • Второе правило гласит, что если N равно нулю, то функция завершается успешно и возвращает список [H|Q].
  • Третье правило гласит, что если N не равно нулю, то функция рекурсивно вызывается с аргументами N1, K1 и Q, где N1 равно N-1, а K1 равно K-1. В строке goal определена задача: добавить число 3 в список [5,5,5,5,5] три раза.

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


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

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

9   голосов , оценка 4.444 из 5

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

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

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