Hola.
Este ejercicio lo vimos en la consulta. Copio la respuesta acá así les queda para otros compañeros.
Para estos ejercicios sirve tener presente las definiciones de las funciones involucradas, por ejemplo en este caso podemos definirlast
como:last [x ] = x
last (_ : x : xs) = last (x : xs)
El problema que tenés en tu razonamiento es que para evaluar last
necesariamente vas a tener que ir descartando elementos que están al
principio de la lista que recibe como argumento hasta llegar al último, y
en ese proceso vas a tener que ir reduciendo l2
y l1
sucesivamente. Eso hace nunca llegues a observar una lista con un solo elemento, que es el único caso en last
produce algo, y por eso la llamada termina divergiendo.
Saludos,
Germán.