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. Очень надеюсь на вашу помощь. Добавлено через 21 час 27 минут Первую часть уже нашёл, оказалось всё очень просто palindrome(L) :- reverse(L, L). Но помощь с двумя другими всё ещё нужна.

Код к задаче: «Compress и uncompress палидромов - Prolog»

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).

12   голосов, оценка 3.667 из 5


СОХРАНИТЬ ССЫЛКУ