Compress и uncompress палидромов - Prolog

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

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

Нужна помощь с зачётом, в прологе я 0, а дэдлайн уже в пятницу.(В далнейшем не собираюсь использовать этот язык, так как не специализируюсь в логических языках, больше предпочитаю java и pascal). Надо составить программму из 3-ёх частей: 1) palindrome(Xs), которая определяет, является ли Xs палиндромом. Например: [], [aa], [bb], [baab], [abba], [a], [bab], [aaa] являются палиндромами. 2) compressed(odd, Zs) и compressed(even, Zs) которые сжимают слово-палидром. Примеры инпутов и аутпутов: ?- compress([a,b,a,b,a], Z). Z = compressed(odd, [a, b, a]) ?- compress([a,b,b,a], Z). Z = compressed(even, [a, b]) 3)uncompress(C,Xs) которая для сжатого палиндрома C устанавливает несжаты палиндром Xs. Очень надеюсь на вашу помощь.
Первую часть уже нашёл, оказалось всё очень просто palindrome(L) :- reverse(L, L). Но помощь с двумя другими всё ещё нужна.

Решение задачи: «Compress и uncompress палидромов»

textual
Листинг программы
compress1(Xs, compressed(Method, Ys)) :-
    length(Xs, Len),
    Rem is rem(Len, 2),
    (Rem = 0 -> Method = even ; Method = odd),
    Cut is div(Len, 2) + Rem,
    length(Ys, Cut),
    append(Ys, _, Xs).
 
uncompress1(compressed(Method, Xs), Ys) :-
    length(Xs, Len),
    (Method = even -> Rem = 0 ; Method = odd, Rem = 1),
    Grow is Len - Rem,
    length(Xs1, Grow),
    append(Xs1, _, Xs),
    reverse(Xs1, Xs2),
    append(Xs, Xs2, Ys).

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

  1. В функции compress1 входной список Xs сжимается до списка Ys.
  2. Если длина списка Xs четная, то метод сжатия будет even, иначе odd.
  3. В функции uncompress1 список Xs разворачивается до списка Ys.
  4. Если метод сжатия even, то список Xs будет сдвинут вправо на 1 позицию, иначе на 2 позиции.

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


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

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

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