Ответ в теме: Получение последнего элемента списка

      Комментарии к записи Ответ в теме: Получение последнего элемента списка отключены
#1730

При получении первого элемента, вы обязательно получите остаток (хвост) списка:

List = [1,2,3,4],
[Head|Tail] = List. % Head = 1, Tail = [2,3,4]

При этом длина хвоста на единицу меньше длины исходного списка.
Разделяйте список таким образом пока не останется один элемент, т.е. пока решение не станет очевидным.

last([SingleElem], SingleElem):-!.
last([_Head|Tail], Last):-
last(Tail, Last).

Если на вход будет подан пустой список, то ни одно из правил не выполнится (он не может быть разделен на голову и хвост) и правило завершится неудачей.