[Práctico 1] [Ejercico 4] Definicion de instancia Arbitrary

[Práctico 1] [Ejercico 4] Definicion de instancia Arbitrary

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

Buenos días.

Definiendo la instancia de Arbitrary para el tipo "Tree a" me surgieron las siguientes dudas:

Yo hice un generador que fuera sized como se muestra en las diapositivas de teórico.

1) Para el caso de n = 0, tendría que devolver EMPTY, está bien devolver "elements[Empty]" o hay otro generador más adecuado??

2) La función de arbitrarytree no puede estar dentro de la instancia? No me quedó claro éste punto. Ahora quedó definida en otro nivel de indentación.

3) La función shrink, la pensé como que devolviera la lista de todos los árboles que resultan de sacar una de las hojas. Pero también debería hacer shrink del valor del nodo? Entonces sería como una lista con todas esas combinaciones?

4) Para la definicion de las leyes cuando comparo los árboles use el "==" y para eso tuve que poner que la definición de "data Tree a = ..." tuviera un deriving de Eq, también en las propiedades tuve que decir que a (el valor de los nodos) era de clase Eq y Num. ¿Eso está correcto?

 

Espero se entiendan las dudas,
Cualquier cosa puedo agregar código.
Gracias!

En respuesta a Bruno Alberto Szilagyi Ibarra

Re: [Práctico 1] [Ejercico 4] Definicion de instancia Arbitrary

de Bruno Alberto Szilagyi Ibarra -

El código de shrink me quedó así:

 


shrink Empty = []
   shrink (Node Empty v Empty) = [Empty]
   shrink (Node l v r) = [(Node izq v r) | izq <- shrink(l)] ++ [(Node l v der) | der <- shrink(r)] ++ [(Node l vshirnked r) | vshirnked <- shrink(v)]

 

¿Es correcta la función?

En respuesta a Bruno Alberto Szilagyi Ibarra

Re: [Práctico 1] [Ejercico 4] Definicion de instancia Arbitrary

de Marcos Viera - InCo -

Es correcta, pero quizás tengas mejores resultados si ponés todo en el mismo generador de listas por comprensión? Otra cosa es que en el caso (Node Empty v Empty) podrías también incluir el resultado de reducir v.

En respuesta a Bruno Alberto Szilagyi Ibarra

Re: [Práctico 1] [Ejercico 4] Definicion de instancia Arbitrary

de Marcos Viera - InCo -

1) Podrías hacer directamente return Empty

2) arbitraryTree no es un método de la clase Arbitrary, podrías definirla afuera de la instancia o local a la función arbitrary

3) Si, podría ser.

4) Si