[Práctico 2] [Ejercicio 1] Escribir Tails y Evens usando REPR.

[Práctico 2] [Ejercicio 1] Escribir Tails y Evens usando REPR.

de Bruno Alberto Szilagyi Ibarra -
Número de respuestas: 3

Buenas, estoy con inconvenientes para interpretar como hacer éstas partes con REPR.

En tails, hice la lista de entrada pase a una función que me devuelve una Repr next s y luego usé fromRepr para ejecutarla, eso está bien?
En evens estoy pensando como hacer, tal vez manteniendo un estado para saber en que elemento estoy.

La duda que me queda es si siempre debería llevar la entrada al mundo de Repr con la función toRepr, o puedo usar otra función para generar la Repr?

Me confunde por el tema de que definimos la regla para el compilador
-- {-# RULES
-- "toRepr/fromRepr"  forall r. toRepr (fromRepr r) = r
-- #-}

No se si se entiende mi duda.

En resumen es si está bien ésto:
evens' xs = fromRepr . evensRepr $ (algo, algo)

o tiene que ser de la forma: evens' xs = fromRepr . evensRepr . toRepr

En respuesta a Bruno Alberto Szilagyi Ibarra

Re: [Práctico 2] [Ejercicio 1] Escribir Tails y Evens usando REPR.

de Marcos Viera - InCo -

En el caso de evens, que recibe solo una lista y retorna una lista, tiene que ser como decís. Hay otros casos en los que por ejemplo recibís dos argumentos y a ambos les hacés toRepr.


saludos


En respuesta a Marcos Viera - InCo

Re: [Práctico 2] [Ejercicio 1] Escribir Tails y Evens usando REPR.

de Bruno Alberto Szilagyi Ibarra -

Hola Marcos, buenas noches.

Como te comentaba en clase, entiendo a paritir de tu respuesta que yo podría hacer:

tails'' = fromRepr. tailsRepr . toRepr

Lo que está pasando es que usando toRepr obtengo un autómata que me va devolviendo los elementos de la lista, pero no veo forma de ir concatenandolos y formando el resultado de tails.

Claro, si no uso toRepr al principio (tails'' xs = fromRepr. tailsRepr (xs, False)), puedo pasar directamente el listado original a la función "tailsRepr" y ahí armar el autómata que una vez ejecutado devuelve el resultado esperado.

La pregunta era si el armado de la primera forma es lo esperado ya que utiliza las reglas de fusión, y si es así, entonces como podría hacer para obtener otra cosa que no fuesen los elementos de a uno. Tal vez haya alguna forma dentro de la función tailsRepr que no logré pensar.

Espero se entienda,

Gracias.

En respuesta a Bruno Alberto Szilagyi Ibarra

Re: [Práctico 2] [Ejercicio 1] Escribir Tails y Evens usando REPR.

de Marcos Viera - InCo -

Si entiendo bien tu duda, algo que podés hacer es que tailsRepr se defina así:


tailsRepr :: Repr a -> Repr (Repr a)
tailsRepr (Repr sgte s) = Repr sgte' (s,False) where ...


Fijate que vos tomás un Repr, pero lo que retornás es otro Repr cuyo estado interno lo podés definir como quieras, en particular como un par.

Contesta esto tu duda? Cualquier cosa volvé a consultar.


saludos