Вставка в список в заданную позицию заданное число раз - Prolog
Формулировка задачи:
А не могли бы вы,если не сложно, посмотреть еще одну программку, которую я пытасюсь написать ?
Задача: вставить в список константу X, начиная с N-ой позиции K раз .
Решение задачи: «Вставка в список в заданную позицию заданное число раз»
textual
Листинг программы
domains i=integer list=i* predicates nondeterm ins_k_times(i,list,i,i,list) clauses ins_k_times(_, L, 0, 0, L) :- !. ins_k_times(X, L, 0, K, [X|T]) :- !, K1 = K-1, ins_k_times(X, L, 0, K1, T). ins_k_times(X, [H|T], N, K, [H|Q]) :- N1 = N-1, ins_k_times(X, T, N1, K, Q). goal 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]
три раза.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д