¿Cómo puede un valor de tipo:Cómo crear un valor de estructura de datos recursivo en (funcional) F #?
type Tree =
| Node of int * Tree list
tener un valor que las referencias en sí genera de una manera funcional?
El valor resultante debe ser igual a x en el siguiente código Python, para una definición adecuada de árbol:
x = Tree()
x.tlist = [x]
Editar: Obviamente más explicación es necesaria. Estoy tratando de aprender F # y programación funcional, así que elegí implementar el cover tree que he programado anteriormente en otros idiomas. Lo relevante aquí es que los puntos de cada nivel son un subconjunto de los del siguiente nivel. La estructura conceptualmente va al nivel -infinito.
En idiomas imperativos, un nodo tiene una lista de hijos que se incluye a sí misma. Sé que esto puede hacerse imperativamente en F #. Y no, no crea un ciclo infinito dado el algoritmo del árbol de portada.
¿Puede ampliar la pregunta, para aquellos de nosotros que no hablan mucho Python? La definición de tipo se ve bien, pero tenga en cuenta que F # no permite la construcción directa de un tipo de Unión discriminada (por ejemplo, Árbol) ... solo la construcción de los valores de unión; por ejemplo, Nodo, como en "dejar x = Nodo (0, [])" o "dejar y = Nodo (1, [x])", donde [] es la lista vacía. –
@James: Quiere crear un nodo que sea su propio hijo. Me gusta 'let rec x = Node (something, [x])' (excepto que no funciona). – sepp2k
@ sepp2k: Eso generalmente crearía un bucle infinito para cualquier código que recorriera la lista, aunque ...muy indeseable :-) He visto esto hecho en otros idiomas para marcar el final de una lista, pero idomatic F # usaría otro valor de DU, como "Ninguno", para ese propósito. –