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

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


textual

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

    append([], List2, List2):-!.
    append([Head|Tail], List2, [Head|TailResult]):-
        append(Tail, List2, TailResult).

СДЕЛАЙТЕ РЕПОСТ

15   голосов, оценка 3.933 из 5



Похожие ответы
  1. Дано задание. Пешки. На горизонтальной доске состоящей из 7 ячеек расположены три белые и три черные пешки с одной свободной ячейкой между ними: A,A,A,_,N,N,N Найти последовательность преобразований начальной конфигурации для получения конечной конфигурации в которой белые пешки меняются с черными местами: N,N,N,_,A,A,A применяя следующие правила: - черная пешка может быть передвинута в лево на соседнюю ячейку если она свободна, например A,N,A,_,N,N,A → A,N,A,N,_,N,A - черная пешка может перепрыгнуть в лево через белую если там находится свободная ячейка, например A,N,_,A,N,N,A → A,N,N,A,_,N,A - белая пешка может быть передвинута в право на соседнюю ячейку если она свободна, например A,N,A,_,N,N,A → A,N,_,A,N,N,A - белая пешка может перепрыгнуть в право через черную если там находится свободная ячейка, например A,A,N,_,N,N,A → A,_,N,A,N,N,A

  1. Подскажите, пожалуйста, (или дайте ссылки на) решения следующих задач со списками: 1) Поменять местами 2 выбранных элемента списка, что-то вроде pred(List, Ind1, Ind2, ResultList) 2) Переместить из списка 1 в список 2 числа, попадающие в заданный интервал, пример pred(List, Begin, End, ResultList).

  1. Помогите пожалуйста! Дано квадратную матрицу неизвестного размера, нужно получить новую матрицу в которой меняются местами половины главной и побочной диагоналей, что находятся справа от центра.

  1. Здравствуйте, помогите написать программы: 1) Создайте предикат, осуществляющий разделение исходного списка на два подсписка. В первый из них должно попасть указанное количество элементов из начала списка, во второй - оставшиеся элементы. 2) Создайте предикат, осуществляющий перестановку двух элементов списка с заданными номерами. Поиск юзал, нашел только это Буду очень благодарен за помощь

  1. Надо еще сделать две такие задачки: 1. Создайте предикат, осуществляющий перестановку двух элементов списка с заданными номерами. 2. Реализуйте предикат min_list без использования предиката min.

  1. Добрый день! Помогите решить задачи на ПРОЛОГ: 2)В каждой строке текстового файла переставьте слова в обратном порядке.