Сформировать список L1 из чисел списка L, кратных k - Prolog

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

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

ПОмогите пжл решить задачку Сформировать список L1 из чисел L, кратных k.

Решение задачи: «Сформировать список L1 из чисел списка L, кратных k»

textual
Листинг программы
domains
list = integer*
 
predicates
nurik92(list, integer, list)
 
clauses
nurik92([], _, []).
nurik92([H|T], K, [H|TN]) :-
    H mod K = 0,
    !,
    nurik92(T, K, TN).
nurik92([_|T], K, TN) :-
    nurik92(T, K, TN).
 
goal
L = [1,2,3,4,5,6,7,8],
nurik92(L, 2, L2),
write(L2), nl,
nurik92(L, 3, L3),
write(L3), nl.

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

  1. В коде используется язык программирования Prolog.
  2. Задача заключается в формировании списка L1 из чисел списка L, кратных k.
  3. Для решения задачи используется рекурсивный алгоритм.
  4. Вначале определяются необходимые типы данных и переменные: — тип данных домен — integer* (целое число, конечно); — переменная L (список целых чисел); — переменная K (целое число); — переменная L1 (список целых чисел, результат); — переменная T (остаток списка); — переменная TN (результат рекурсивного вызова).
  5. Определяются необходимые предикаты: — nurik92(list, integer, list) — основной предикат, выполняющий формирование списка L1;
  6. Задаются начальные условия: — L = [1,2,3,4,5,6,7,8] (исходный список); — K = 2, 3 (перебираемые значения); — L2, L3 (результаты выполнения предиката nurik92 с соответствующими значениями K).
  7. Формулируется основная цель: — L2 = [2,4,6,8] (список L1 для k=2); — L3 = [3,6,9,12] (список L1 для k=3).
  8. Выполняется рекурсивный вызов предиката nurik92 с аргументами L, K, TN.
  9. Для каждого элемента списка L проверяется условие H mod K = 0 (делится ли элемент на k без остатка).
  10. Если условие выполняется, то элемент добавляется в список L1 и выполняется рекурсивный вызов для оставшегося списка T и значения K.
  11. Если условие не выполняется, то рекурсивный вызов выполняется для оставшегося списка T и значения K.
  12. Если список пустой, то рекурсия завершается и результатом будет список L1.
  13. Выполняется печать результатов выполнения цели.
  14. Аналогично выполняется формирование списка L1 для k=3.
  15. Результатом выполнения кода будет список L1 = [2,4,6,8,9,12] для k=2 и список L1 = [3,6,9,12,15,18] для k=3.

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


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

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

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