Como apagar o último elemento de uma lista no Prolog?

Eu estou na seguinte situação: Eu tenho uma lista e gostaria de excluir apenas o último elemento.

Eu implementei a seguinte regra (que não funciona bem):

deleteLastElement([Only],WithoutLast) :-
    !,
    delete([Only],Only,WithoutLast).
deleteLastElement([_|Tail],WithoutLast) :-
    !,
    deleteLastElement(Tail,WithoutLast).

O problema é que quando eu chamo, todo o elemento da lista é deletado, na verdade, se eu executar a seguinte declaração eu obtenho:

[debug]  ?- deleteLastElement([a,b,c], List).
List = [].

Olhando para o traço, acho que está claro a causa deste problema:

[trace]  ?- deleteLastElement([a,b], List).
   Call: (7) deleteLastElement([a, b], _G396) ? creep
   Call: (8) deleteLastElement([b], _G396) ? creep
   Call: (9) lists:delete([b], b, _G396) ? creep
   Exit: (9) lists:delete([b], b, []) ? creep
   Exit: (8) deleteLastElement([b], []) ? creep
   Exit: (7) deleteLastElement([a, b], []) ? creep
List = [].

Quando o caso base é alcançado, oSem passado lista é unificada com olista vazia [] e quando o retrocesso é realizadoSem passado ainda permanece a lista vazia.

Isto não é bom.

Eu estava pensando em implementá-lo fazendo a seguinte operação:

Conte o número de elemento na lista antes de chamar o predicado que exclua o último elemento.Iterar por recursão e decrementar o valor do número de elemento de cada vezSe é verdade que o número do elemento é 0 significa que este é o último elemento, então eu apago-o da lista original

Mas isso não me parece claro nem tão bom, gostaria de saber se existe uma boa solução declarativa para esse problema.

questionAnswers(4)

yourAnswerToTheQuestion