Я пытаюсь сделать предикаты такими, чтобы для списков X и Y rmlast был равен true, если X и Y - один и тот же список, за исключением того факта, что Y имеет на 1 элемент больше. Так [1] [1,2] или [3,2] [3,2,5].
rmlast([], [_]). :- true.
rmlast([X|xtail], [Y|ytail]) :- rmlast(xtail,ytail), X is Y.
Это, однако, дает ложный результат для всего, кроме базового случая.