Ignorando interoperabilidad nativa y transitorios, ¿es posible crear cualquier estructura de datos en Clojure que contenga referencias circulares directas?¿Es posible crear referencias circulares en Clojure?
Parecería que las estructuras de datos inmutables solo pueden contener referencias a versiones anteriores de ellos mismos. ¿Hay alguna API Clojure que pueda crear una nueva estructura de datos que tenga una referencia a sí misma?
Scheme tiene la forma letrec que permite crear estructuras mutuamente recursivas, pero, hasta donde puedo decir, Clojure no tiene nada similar.
Esta pregunta está relacionada con la transferencia de Clojure a iOS, que no tiene recolección de basura, pero tiene recuento de referencias.
Aquí hay una pregunta SO muy relacionada: [¿Cómo crear una función recursiva anónima que genere lazy-seq en Clojure?] (Http://stackoverflow.com/questions/3373157/how-to-create-a-lazy- seq-generating-anonymous-recursive-function-in-clojure). Ver mi respuesta para una serie de enfoques posibles. Una de ellas es a través de una macro 'letrec' de algún tipo; consulte [este Gist] (http://gist.github.com/486880) para mi versión (que funciona como' letrec' de Scheme). –
Gracias por todas las respuestas. Parece que necesitaré GC completo para manejar Clojure y estoy experimentando con Gambit Scheme como el objetivo de traducción. –
Puede que le interese [Propuesta de intercambio de pila] (http://area51.stackexchange.com/proposals/11464/code-review?referrer=aWNm_PdciyFqjFW8CUacGw2 "revisión de código"). Está casi listo para comenzar la versión beta, solo necesita algunos más. – greatwolf