Циклическая перестановка элементов - Prolog

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

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

Всем привет! Являюсь новичком, "пытаюсь" понять азы языка, использую SWI-Prolog, поэтому буду крайне признателен за совет. Задача "Напишите предикат p(+L, -S) - истинный тогда и только тогда, когда список S есть циклическая перестановка элементов списка L, например, p([f, g, h, j], [g, h, j, f]) -истина." Моя идея решения простая: определить голову и хвост, переставить голову в хвост. С реализацией проблемы. Во-первых, не могу понять, где в моем коде ошибка:

Решение задачи: «Циклическая перестановка элементов»

textual
Листинг программы
    append([], List2, List2):-!.
    append([Head|Tail], List2, [Head|TailResult]):-
        append(Tail, List2, TailResult).

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

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

  1. Если первый список пустой, то есть [], то возвращается второй список List2 без изменений.
  2. Если первый список не пустой, то есть [Head|Tail], то функция рекурсивно вызывает саму себя, передавая в качестве аргументов Tail (оставшуюся часть первого списка) и List2. В результате получается новый список [Head|TailResult].
  3. Затем полученный результат TailResult с помощью оператора | объединяется со значением переменной Head, и результат присваивается переменной TailResult. Таким образом, после выполнения функции append для двух списков, первый список будет содержать элементы второго списка, а второй список останется без изменений. Пример вызова функции: append([1, 2, 3], [4, 5, 6], List2). В результате выполнения данного кода, в переменной List2 будет содержаться список [4, 5, 6], а в переменной TailResult будет содержаться список [1, 2, 3].

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

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