Prueba 2017 ejercicio 10

Prueba 2017 ejercicio 10

de Lucas Lazogue Paez -
Número de respuestas: 4

Buenas, tengo unas dudas con un par de preguntas de este ejercicio


En la parte c pide calcular (take 5 ◦ tail ◦ recorre $ genera)

La respuesta dice diverge, pero no debería hacer el take 5 ◦ tail ◦ recorre l? y eso da [2,3,4,5,6]?

La otra consulta es por la parte d que pide calcular (head $ zip (recorreL genera) (recorre genera))

siguiendo el mismo razonamiento de la parte c, no debería dar (0, 1)?


Gracias!

En respuesta a Lucas Lazogue Paez

Re: Prueba 2017 ejercicio 10

de Alberto Pardo -
Hola Lucas,

Respecto a la parte c), la cuestión es que "genera" construye un árbol infinito, en particular su rama izquierda es infinita. Entonces cuando "recorre" trata de armar la lista va a entrar en loop haciendo llamadas a los sub-arboles izquierdos sin alcanzar nunca un árbol vacío. El tail de esa lista va a entrar en loop y mas aún el take que precisa analizar la lista para quedarse con los 5 elementos.

Respecto a la parte d), retorna (0,0) resultado esencialmente de estos pasos:

(head $ zip (recorreL genera) (recorreR genera))
= head $ zip (recorreL (fst (Nodo ... 0 ...,...))) (recorreR (fst (Nodo ... 0 ...,...)))
= head $ zip (recorreL (Nodo ... 0 ...)) (recorreR (Nodo ... 0 ...))
= head $ zip (0 : recorreL ...) (0 : recorreR ...)
= head ((0,0) : zip (recorreL ...) (recorreR ...))
= (0,0)

Saludos,
Alberto.
En respuesta a Alberto Pardo

Re: Prueba 2017 ejercicio 10

de Diego Martin Amorena Gomez De Salazar -
Buenas,
No estaría entendiendo por que la pregunta a seria distinta a la pregunta c. Ya que en la lista a tampoco se llegara nunca a un sub arbol vacio.
a ) (take 5 ◦ tail ◦ recorreL $ genera)
sol [1,2,3,4,5]
En respuesta a Diego Martin Amorena Gomez De Salazar

Re: Prueba 2017 ejercicio 10

de Alberto Pardo -
Hola Diego,

Hay una diferencia sustancial entre a) y c). En c) se aplica la función "recorre" y eso produce lo que le comentaba a Lucas en el mensaje anterior. En cambio, en a) se aplica "recorreL" que va recorriendo el árbol (infinito) generado desde la raíz, tomando siempre por la rama de la izquierda. La generación del árbol es un proceso productivo en el sentido de que se puede ir generando incrementalmente. Luego, recorreL puede ir armando la lista, de la que luego se puede hacer tail y finalmente quedarse con los 5 primeros elementos.

Saludos,
Alberto.