¿Cómo obtener los 2 últimos valores de una lista en recursión y en recursión de cola?

Necesito un predicadolast_two(LST,Y,Z) que asigna el último valor de una lista a Z y el segundo a Y. ¿Cómo puedo hacerlo en forma recursiva? ¿Y cómo puedo hacerlo en cola recursiva? ¡Gracias!

Aquí hay un código con recursión de cola, ¿puedo hacerlo más eficiente?

<code>last2_2([_|[H1|[H2|T]]],Y,Z):-last2_2([H1|[H2|T]],Y,Z).

last2_2([H1,H2],H1,H2).
</code>

Respuestas a la pregunta(1)

Su respuesta a la pregunta