Ejercicios de repaso - Definiciones

Ejercicios de repaso - Definiciones

de Agustina Arismendi Campo -
Número de respuestas: 2

Buenas tardes,


También me surge la siguiente consulta:

k a [] = [a]
k a (x:xs) = x : reverse (k a xs) ++ [x]
Respecto a este ejercicio se solicita indicar que afirmación es equivalente:

Seleccione una:
 k a xs = foldr (:) (reverse xs) (a : xs)
k a xs = foldr (:) (a : reverse xs) xs
k a xs = foldr (:) (reverse (a : xs)) xs
k a xs = foldr (:) [a] (reverse xs)

No logro comprender como llegar a la respuesta correcta (la "d" en este caso)


Agradezco la explicación que me puedan brindar

Gracias, Saludos

En respuesta a Agustina Arismendi Campo

Re: Ejercicios de repaso - Definiciones

de Marcos Viera - InCo -
Acá lo importante es entender cómo funciona la recursión y cómo funciona el foldr.
Con respecto a la recursión, podés ver que en el paso recursivo de `k` lo que se hace es poner en la lista resultante el elemento de la lista de entrada al principio y al final. Por lo tanto el `reverse` de la llamada recursiva no tiene efecto.
Si por ejemplo tenemos `k 5 [1,2,3,4]` el resultado es `[1,2,3,4,5,4,3,2,1]`.

Ahora hay que buscar una aplicación de `foldr` que haga lo mismo.
En realidad la respuesta correcta es la **b**, que define: `k a xs = foldr (:) (a : reverse xs) xs`.
En la que el foldr recorre toda la lista, insertando en la lista resultante todos los elementos en el mismo orden y como paso base (al final de la lista) coloca (a : reverse xs).