¿Cuál es la mejor forma de obtener un tipo de datos de cola inmutable simple y eficiente en Clojure?Cola inmutable en Clojure
Solo necesita dos operaciones, en cola y dequeue con la semántica habitual.
Consideré listas y vectores por supuesto, pero entiendo que tienen un rendimiento comparativamente pobre (es decir, O (n) o peor) para modificaciones al final y al principio respectivamente, ¡así que no es ideal para colas!
Idealmente me gustaría tener una estructura de datos persistente adecuada con O (log n) para las operaciones en cola y dequeue.
Para evitar que alguien escriba sobre cómo se pueden usar las listas de contras para implementar las pilas push/pop (como casi lo hice), no olvides que la pregunta se refiere a * colas *. :-) –
Acabo de notar que hay una clase llamada PersistentQueue en la última versión 1.2 de la fuente Clojure Java .... puede ser la respuesta a mi propia pregunta – mikera
Ha estado allí desde siempre (solo comprobado con 1.1, pero creo que es más antiguo) que eso). Tenga en cuenta que no hay una función de fábrica ni una sintaxis del lector proporcionadas por defecto; use 'clojure.lang.PersistentQueue/EMPTY' para obtener una instancia vacía. Luego 'conj',' pop' y 'peek' funcionan como deberían con una cola. Ver p. mi respuesta a esta pregunta: http://stackoverflow.com/questions/2760017 para algún código escrito tanto con 'c.l.PQ' como con' LinkedBlockingQueue' de Java. –